-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPromStat.py
143 lines (125 loc) · 5.49 KB
/
PromStat.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
from enum import Enum
from path import Path
from FromJson import FromJson
import sys, getopt, argparse, json, datetime, re
# date = datetime.datetime.fromtimestamp(value[0], tz=datetime.timezone.utc)
class AGGR(Enum):
MAX=1
MIN=2
AVG=3
LAST=4
SUM=5
class PromStat(FromJson):
def __init__(self, metricFile):
FromJson.__init__(self, metricFile)
def getInstances(self, filterKey, filterValue):
metricInstances = []
if self.fromJson is not None:
for metric in self.fromJson["data"]["result"]:
if(re.search(filterValue, metric["metric"][filterKey])):
metricInstances.append(metric["metric"][filterKey])
return metricInstances
def extractMetricFilteredOnKey(self, filterKey, filterValue, timeAggrOp, instanceAggrOp):
if self.fromJson is not None:
metricValues = []
for metric in self.fromJson["data"]["result"]:
if(re.search(filterValue, metric["metric"][filterKey])):
metricValues.append(self.aggregate(self.promValuesToNumArray(metric["values"]), timeAggrOp))
metricValue = self.aggregate(metricValues, instanceAggrOp)
return float(metricValue)
else:
return float('nan')
def extractMetricFilteredOnKey(self, filterKey, filterValue, timeAggrOp, instanceAggrOp):
if self.fromJson is not None:
metricValues = dict()
for metric in self.fromJson["data"]["result"]:
if(re.search(filterValue, metric["metric"][filterKey])):
groupByValue = metric["metric"][filterKey]
value = self.aggregate(self.promValuesToNumArray(metric["values"]), timeAggrOp)
if groupByValue not in metricValues.keys() or value > metricValues[groupByValue]:
metricValues[groupByValue] = self.aggregate(self.promValuesToNumArray(metric["values"]), timeAggrOp)
metricValuesArray = []
for metricValue in metricValues:
metricValuesArray.append(metricValues[metricValue])
metricValue = self.aggregate(metricValuesArray, instanceAggrOp)
return float(metricValue)
else:
return float('nan')
def extractMetricGroupedByKey(self, timeAggrOp, instanceAggrOp, groupByKey):
if self.fromJson is not None:
metricValues = dict()
for metric in self.fromJson["data"]["result"]:
groupByValue = metric["metric"][groupByKey]
value = self.aggregate(self.promValuesToNumArray(metric["values"]), timeAggrOp)
if groupByValue not in metricValues.keys() or value > metricValues[groupByValue]:
metricValues[groupByValue] = value
metricValuesArray = []
for metricValue in metricValues:
metricValuesArray.append(metricValues[metricValue])
metricValue = self.aggregate(metricValuesArray, instanceAggrOp)
return float(metricValue)
else:
return float('nan')
# def extractMetricSlicedByKey(self, timeAggrOp, instanceAggrOp, groupByKey):
# if self.fromJson is not None:
# metricValues = dict()
# for metric in self.fromJson["data"]["result"]:
# groupByValue = metric["metric"][groupByKey]
# value = self.aggregate(self.promValuesToNumArray(metric["values"]), timeAggrOp)
# if groupByValue not in metricValues.keys():
# metricValues[groupByValue] = []
# metricValues[groupByValue].append(value)
# metricValuesArray = []
# for metricValue in metricValues:
# metricValue[metricValue.key()] = self.aggregate(metricValue.value(), instanceAggrOp)
# metricValue = self.aggregate(metricValuesArray, instanceAggrOp)
# return float(metricValue)
# else:
# return float('nan')
def aggregate(self, numValues, aggrOp):
metricValue = None
if aggrOp == AGGR.AVG:
metricValue = self.getAvg(numValues)
elif aggrOp == AGGR.MAX:
metricValue = self.getMax(numValues)
elif aggrOp == AGGR.MIN:
metricValue = self.getMin(numValues)
elif aggrOp == AGGR.LAST:
metricValue = self.getLast(numValues)
elif aggrOp == AGGR.SUM:
metricValue = self.getSum(numValues)
return metricValue
def getMax(self, values):
metricValue = None
for value in values:
if metricValue is None:
metricValue = value
else:
metricValue = max(metricValue, value)
return metricValue
def getMin(self, values):
metricValue = None
for value in values:
if metricValue is None:
metricValue = value
else:
metricValue = min(metricValue, value)
return metricValue
def getAvg(self, values):
metricValue = 0
for value in values:
metricValue += value
return metricValue / len(values)
def getSum(self, values):
metricValue = 0
for value in values:
metricValue += float(value)
return metricValue
def getLast(self, values):
size = len(values)
return float(values[size-1])
def promValuesToNumArray(self, values):
numValues = []
for value in values:
numValues.append(value[1])
return numValues