-
Notifications
You must be signed in to change notification settings - Fork 6
/
resetRoutingDecisions.py
83 lines (76 loc) · 2.79 KB
/
resetRoutingDecisions.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
72
73
74
75
76
77
78
79
80
81
82
83
import os
import json
from pathlib import Path
from google.cloud import datastore
import sys
import datetime
import configparser
class resetDecision:
def __init__(self, workflow, vmNum):
self.jsonPath = (
str(Path(os.path.dirname(os.path.abspath(__file__))).resolve().parents[0])
+ "/log-parser/get-workflow-logs/data/"
+ workflow
+ ".json"
)
with open(self.jsonPath, "r") as json_file:
self.workflow_json = json.load(json_file)
self.functionNum = len(self.workflow_json["workflowFunctions"])
self.workflow = workflow
self.vmNum = vmNum
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = (
str(Path(os.path.dirname(os.path.abspath(__file__))))
+ "/key/schedulerKey.json"
)
configPath = (
str(Path(os.path.dirname(os.path.abspath(__file__))).resolve().parents[0])
+ "/project-config.ini"
)
globalConfig = configparser.ConfigParser()
globalConfig.read(configPath)
self.projectConfig = globalConfig["settings"]
project = str(self.projectConfig["projectid"])
self.datastore_client = datastore.Client()
kind = "routingDecision"
name = self.workflow
routing_key = self.datastore_client.key(kind, name)
self.routing = self.datastore_client.get(key=routing_key)
self.resetRouting()
self.resetSavedTimestamps()
self.resetResources()
def resetResources(self):
lines = [0, 0]
with open(
str(Path(os.path.dirname(os.path.abspath(__file__)))) + "/resources.txt",
"w",
) as f:
for line in lines:
f.write(str(line))
f.write("\n")
def resetSavedTimestamps(self):
now = str(datetime.datetime.now())
dataJSONN = (
str(Path(os.path.dirname(os.path.abspath(__file__))).resolve().parents[0])
+ "/log-parser/get-workflow-logs/data/"
+ self.workflow
+ "/data.json"
)
newData = {}
for func in self.workflow_json["workflowFunctions"]:
newData[func] = now
with open(dataJSONN, "w") as outfile:
json.dump(newData, outfile)
def resetRouting(self):
rates = [25, 50, 75, 95]
for percent in rates:
finalDecision = []
for _ in range(self.functionNum):
eachFunc = [0] * int(self.vmNum)
finalDecision.append(eachFunc)
self.routing["routing" + "_" + str(percent)] = str(finalDecision)
self.routing["active"] = "50"
self.datastore_client.put(self.routing)
if __name__ == "__main__":
workflow = sys.argv[1]
vmNum = sys.argv[2]
reset = resetDecision(workflow, vmNum)