import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from lib.collectors.stat_collector import DiskResourcesStatCollector, DiskWauForecast022020StatCollector
import logging
import yaml
from lib.analyzers.calc import *
from lib.constants import *
loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]
for logger in loggers:
logger.setLevel(logging.WARNING)
import os
import sys
sys.path.append(os.path.realpath('..'))
sys.path
!{sys.executable} -m pip install xmltodict
!{sys.executable} -m pip install -r ../bin/requirements.txt
# Интервал импорта данных
data_sd = '2019-12-01'
data_ed = '2020-04-01'
# Интервал предсказывания
fc_start = pd.to_datetime(data_ed)
fc_end = pd.to_datetime('2021-01-01')
# Импорт предзаказов
orders = yaml.safe_load(open('../conf/orders.yaml'))
# Импорт железных кондукторных групп, по которым строются предсказания
disk_cnames = yaml.safe_load(open('../conf/cnames.yaml'))
# Фильтрация окружений кулауда, частные графики строятся по окружениям потребляющим больше X% указанного ресурса
qloud_filter_column = 'cpu_total'
qloud_min_perc = 1.5
# Загрузка данных по заданному интервалу
disk_data = DiskResourcesStatCollector().download_data((data_sd, data_ed))
df = pd.DataFrame(disk_data)
# Очистка данных от сущности fqdn, дальшейший анализ производится по кондукторным группам / qloud-prj
tdf = df.copy()
tdf[fd] = pd.to_datetime(tdf[fd])
tdf = tdf.sort_values(fd).set_index(fd).drop(fqdn, axis=1)
tdf = tdf.groupby([tdf.index, cg]).sum().reset_index(cg)
# Загрузка предсказанных данных по недельной аудитории, используется для предсказания
pred_df = DiskWauForecast022020StatCollector().download_data((fc_start, fc_end))
name = 'disk'
prepared = concat_df_with_wau(tdf[tdf[cg] == name], pred_df, fc_start, fc_end)
plot_df_by_cg(prepared, 'qloud disk', fc_start, figsize=(24, 6), orders=orders['qloud'])
qloud_names = df[df[fqdn] == 'qloud'][cg]
qloud_names = qloud_names[qloud_names.apply(lambda x: len(x.split('.')) == 2)].unique()
qloud_names = filter_by_percentage(tdf[tdf[cg].isin(qloud_names)], cg, qloud_filter_column, qloud_min_perc)[cg].values
for name in qloud_names:
prepared = concat_df_with_wau(tdf[tdf[cg] == name], pred_df, fc_start, fc_end)
plot_df_by_cg(prepared, name, fc_start)
hw_cnames = disk_cnames['hw']
prepared = concat_df_with_wau(sum_df_by_names(tdf, cg, hw_cnames), pred_df, fc_start, fc_end)
plot_df_by_cg(prepared, 'HW resources (%s)' % ', '.join(hw_cnames), fc_start, figsize=(24, 6), orders=orders['hw'])
for name in hw_cnames:
prepared = concat_df_with_wau(tdf[tdf[cg] == name], pred_df, fc_start, fc_end)
plot_df_by_cg(prepared, name, fc_start)
db_names = disk_cnames['db']
prepared = concat_df_with_wau(sum_df_by_names(tdf, cg, db_names), pred_df, fc_start, fc_end)
plot_df_by_cg(prepared, 'DB resources (%s)' % ', '.join(db_names), fc_start, figsize=(24, 6), orders=orders['hw'])
for name in db_names:
prepared = concat_df_with_wau(tdf[tdf[cg] == name], pred_df, fc_start, fc_end)
plot_df_by_cg(prepared, name, fc_start)