-
Notifications
You must be signed in to change notification settings - Fork 0
/
logic.py
71 lines (58 loc) · 1.88 KB
/
logic.py
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
import logging
import json
import globalInfo
import time
import threading
import rule as config
logger = logging.getLogger('flask.app')
def register(node, app, pod):
if globalInfo.GetRegister(pod) is None:
globalInfo.AddRegister([node, app, pod])
rule = globalInfo.GetRule(app)
if rule is None:
logger.info(
"Register failed, no matching rule: <%s, %s, %s>", node, app, pod)
return False
else:
rule.run(node, pod)
logger.info("Register success: <%s, %s, %s>", node, app, pod)
return True
else:
logger.info("Register Info already exit: <%s, %s, %s>", node, app, pod)
return False
def stop(pod):
globalInfo.DeletRegister(pod)
proc = globalInfo.GetPolicyProc(pod)
if proc is not None:
proc["flag"].value = 1
threading.Thread(target=procClean, args=(pod,)).start()
return True
else:
logger.warning("Pod does not exit: %s", pod)
return False
def json2RuleList(d):
if "appname" in d:
rule = config.Rule(d["appname"], d["class"], d["sla"],
d["policy"], d["input"], d["output"])
return rule
elif "rules" in d:
return {"rules": {r.appname: r for r in d["rules"]}}
else:
return {**d}
def loadConfig():
with open("config.json", "r") as configFile:
config = json.load(configFile, object_hook=json2RuleList)
globalInfo.SetRules(config["rules"])
return True
def procClean(pod):
proc = globalInfo.GetPolicyProc(pod)
for _ in range(0, 3):
time.sleep(5)
if proc["flag"].value == 2:
proc["proc"].close()
logger.info("Clean policy proc of %s", pod)
return
logger.info("Clean policy violent proc of %s", pod)
proc["proc"].terminate()
time.sleep(5)
proc["proc"].close()