openGauss源码解析(175)

openGauss源码解析:AI技术(22)

8.5.3 关键源码解析

1 总体流程解析

智能索引推荐工具的路径是openGauss-server/src/gausskernel/dbmind/tools/anomaly_detection,下面的代码详细展示了程序的入口。

def forecast(args):

# 如果没有指定预测方式,则默认使用’auto_arima’算法

if not args.forecast_method:

forecast_alg = get_instance('auto_arima')

else:

forecast_alg = get_instance(args.forecast_method)

# 指标预测功能函数

def forecast_metric(name, train_ts, save_path=None):

forecast_alg.fit(timeseries=train_ts)

dates, values = forecast_alg.forecast(

period=TimeString(args.forecast_periods).standard)

date_range = "{start_date}~{end_date}".format(start_date=dates[0],

end_date=dates[-1])

display_table.add_row(

[name, date_range, min(values), max(values), sum(values) / len(values)]

)

# 校验存储路径

if save_path:

if not os.path.exists(os.path.dirname(save_path)):

os.makedirs(os.path.dirname(save_path))

with open(save_path, mode='w') as f:

for date, value in zip(dates, values):

f.write(date + ',' + str(value) + '\n')

# 从本地sqlite中抽取需要的数据

with sqlite_storage.SQLiteStorage(database_path) as db:

if args.metric_name:

timeseries = db.get_timeseries(table=args.metric_name, period=max_rows)

forecast_metric(args.metric_name, timeseries, args.save_path)

else:

# 获取sqlite中所有的表名

tables = db.get_all_tables()

# 从每个表中抽取训练数据进行预测

for table in tables:

timeseries = db.get_timeseries(table=table, period=max_rows)

forecast_metric(table, timeseries)

# 输出结果

print(display_table.get_string())

# 代码远程部署

def deploy(args):

print('Please input the password of {user}@{host}: '.format(user=args.user, host=args.host))

# 格式化代码远程部署指令

command = 'sh start.sh --deploy {host} {user} {project_path}' \

.format(user=args.user,

host=args.host,

project_path=args.project_path)

# 判断指令执行情况

if subprocess.call(shlex.split(command), cwd=SBIN_PATH) == 0:

print("\nExecute successfully.")

else:

print("\nExecute unsuccessfully.")

# 展示当前监控的参数

def show_metrics():

# 项目总入口

def main():

posted @ 2024-05-06 10:24  openGauss-bot  阅读(1)  评论(0编辑  收藏  举报