summaryrefslogtreecommitdiff
path: root/controller.py
blob: dc2d40930d926560aff28d501ef279eb79f0593c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/3/18 20:02
# @author    : yinjinagyi
# @File    : controller.py.py
# @Function:
import datetime
import sys

import pytz
from codev.detection.ModelTraning import ModelTraining
from codev.tool import toolFunction, LoggingTool
from codev.detection.ModelDetection import ModelDetection
from codev.detection.Monitor import Monitor

logger = LoggingTool.Logger().getLogger()

if __name__ == '__main__':

    # 全局参数获取
    data = toolFunction.readYaml('config.yaml')
    config = dict()
    for item in data['config']:
        config.update(item)

    timeZone = str(config['timeZone'])

    # 获取程序启动时间
    startTime = datetime.datetime.now(tz=pytz.timezone(timeZone)).strftime("%Y-%m-%d %H:%M:%S")

    # 获得当前的日期-小时向下取整
    tailTime = datetime.datetime.now(tz=pytz.timezone(timeZone)).strftime("%Y-%m-%d %H")

    # 获得待测窗口时间
    headTime = (datetime.datetime.now(tz=pytz.timezone(timeZone)) - datetime.timedelta(
        hours=config['hours_N'])).strftime("%Y-%m-%d %H")

    # 获得时间窗口
    headTime = datetime.datetime.strptime(str(headTime) + ':00:00', '%Y-%m-%d %H:%M:%S')
    tailTime = datetime.datetime.strptime(str(tailTime) + ':00:00', '%Y-%m-%d %H:%M:%S')
    config['headTime'] = headTime
    config['tailTime'] = tailTime


    # 设置测试时间
    if config['ifTest'] == 1:
        tailTime = datetime.datetime.strptime(str(config['testEnvironmentTailTime']), '%Y-%m-%d %H:%M:%S').strftime(
            "%Y-%m-%d %H")
        headTime = config['headTime'] = datetime.datetime.strptime(tailTime, '%Y-%m-%d %H') - datetime.timedelta(
            hours=config['hours_N'])
        tailTime = datetime.datetime.strptime(str(tailTime) + ':00:00', "%Y-%m-%d %H:%M:%S")
        config['tailTime'] = tailTime

    logger.info("DataQuerying from {} to {} ".format(headTime, tailTime))

    # 配置为非模型训练模式但无model文件时报错退出
    if config['initModelTrain'] == 0:
        if not toolFunction.fileExists(config['ModelPath']):
            logger.error('Model file "{}" is not found, check if configuration is correct!'.format(config['ModelPath']))
            sys.exit()
    # 配置为模型训练模式时进行模型训练
    if config['initModelTrain'] == 1:
        logger.info("Start model generation...")
        config['headTime'] = config['training_start_time']
        config['tailTime'] = config['training_end_time']
        ModelTraining(config).training()
        logger.info("Model-training completed!")
        sys.exit()

    # 监控
    if config['monitor_switch'] == 'on':
        with open(config['monitor_file_path'], "w") as file:
            # 写入一个空字符串作为文件内容
            file.write("")
        kb_monitor_metrics = Monitor(config).calculate_kb_metric()
        for item in kb_monitor_metrics.items():
            with open(config['monitor_file_path'], "a") as file:
                file.write('vpn_thwarting_psiphon3_serverip_' + item[0] + ' ' + str(item[1]) + '\n')
                logger.info("[Monitor] - vpn_thwarting_psiphon3_serverip_{} {}".format(item[0], str(item[1])))
        ck_monitor_metrics = Monitor(config).calculate_ck_metric()
        for item in ck_monitor_metrics.items():
            with open(config['monitor_file_path'], "a") as file:
                file.write('vpn_thwarting_psiphon3_server_app_' + item[0] + ' ' + str(item[1]) + '\n')
                logger.info("[Monitor] - vpn_thwarting_psiphon3_server_app_{} {}".format(item[0], str(item[1])))

    # 配置为非训练模式且已有model文件时进行样本评估
    connectTest = toolFunction.connectTest(config)
    detection = ModelDetection(config)
    flag = connectTest.dataTest()
    if flag == 0:
        logger.error("No data in time range above! ")
    if flag == 1:
        logger.info("Start detection processing ...")
        detection.detection()

    if config['if_update_kb']:
        detection.upload_to_kb()
        logger.info("Complete update knowledgeBase!")

    # 获取程序结束时间
    endTime = datetime.datetime.now(tz=pytz.timezone(timeZone)).strftime("%Y-%m-%d %H:%M:%S")