mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 03:07:56 +00:00
Major Ghost script improvements and additions
Signed-off-by: Matthew Stidham <stidmatt@gmail.com>
This commit is contained in:
@@ -61,7 +61,7 @@ class CSVReader:
|
||||
def to_html(self, df):
|
||||
html = ''
|
||||
html = html + ('<table style="border:1px solid #ddd"><tr>')
|
||||
for row in df:
|
||||
for row in df[1:]:
|
||||
for item in row:
|
||||
html = html + ('<td style="border:1px solid #ddd">%s</td>' % item)
|
||||
html = html + ('</tr>\n<tr>')
|
||||
@@ -75,12 +75,18 @@ class CSVReader:
|
||||
for row in df:
|
||||
try:
|
||||
if expression == 'less than':
|
||||
if float(row[target_index]) <= target:
|
||||
if float(row[target_index]) < target:
|
||||
targets.append(counter)
|
||||
counter += 1
|
||||
else:
|
||||
counter += 1
|
||||
if expression == 'greater than':
|
||||
if float(row[target_index]) > target:
|
||||
targets.append(counter)
|
||||
counter += 1
|
||||
else:
|
||||
counter += 1
|
||||
if expression == 'greater than or equal to':
|
||||
if float(row[target_index]) >= target:
|
||||
targets.append(counter)
|
||||
counter += 1
|
||||
@@ -90,6 +96,12 @@ class CSVReader:
|
||||
counter += 1
|
||||
return list(map(df.__getitem__, targets))
|
||||
|
||||
def concat(self, dfs):
|
||||
final_df = dfs[0]
|
||||
for df in dfs[1:]:
|
||||
final_df = final_df + df[1:]
|
||||
return final_df
|
||||
|
||||
|
||||
class GhostRequest:
|
||||
def __init__(self,
|
||||
@@ -193,25 +205,26 @@ class GhostRequest:
|
||||
tags='custom',
|
||||
authors=authors)
|
||||
|
||||
def wifi_capacity_to_ghost(self,
|
||||
authors,
|
||||
folders,
|
||||
title=None,
|
||||
server_pull=None,
|
||||
ghost_host=None,
|
||||
port='22',
|
||||
user_pull='lanforge',
|
||||
password_pull='lanforge',
|
||||
user_push=None,
|
||||
password_push=None,
|
||||
customer=None,
|
||||
testbed='Unknown Testbed',
|
||||
test_run=None,
|
||||
target_folders=list(),
|
||||
grafana_dashboard=None,
|
||||
grafana_token=None,
|
||||
grafana_host=None,
|
||||
grafana_port=3000):
|
||||
def kpi_to_ghost(self,
|
||||
authors,
|
||||
folders,
|
||||
parent_folder=None,
|
||||
title=None,
|
||||
server_pull=None,
|
||||
ghost_host=None,
|
||||
port=22,
|
||||
user_push=None,
|
||||
password_push=None,
|
||||
customer=None,
|
||||
testbed='Unknown Testbed',
|
||||
test_run=None,
|
||||
target_folders=list(),
|
||||
grafana_dashboard=None,
|
||||
grafana_token=None,
|
||||
grafana_host=None,
|
||||
grafana_port=3000,
|
||||
grafana_datasource='InfluxDB',
|
||||
grafana_bucket=None):
|
||||
text = ''
|
||||
csvreader = CSVReader()
|
||||
if grafana_token is not None:
|
||||
@@ -219,27 +232,44 @@ class GhostRequest:
|
||||
grafana_host,
|
||||
grafanajson_port=grafana_port
|
||||
)
|
||||
if test_run is None:
|
||||
test_run = sorted(folders)[0].split('/')[-1].strip('/')
|
||||
print(folders)
|
||||
for folder in folders:
|
||||
print(folder)
|
||||
ssh_pull = paramiko.SSHClient()
|
||||
ssh_pull.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
|
||||
ssh_pull.connect(server_pull,
|
||||
port,
|
||||
username=user_pull,
|
||||
password=password_pull,
|
||||
allow_agent=False,
|
||||
look_for_keys=False)
|
||||
scp_pull = SCPClient(ssh_pull.get_transport())
|
||||
scp_pull.get(folder, recursive=True)
|
||||
target_folder = str(folder).rstrip('/').split('/')[-1]
|
||||
target_folders.append(target_folder)
|
||||
print('Target folder: %s' % target_folder)
|
||||
#if parent_folder is None:
|
||||
#test_run = sorted(folders)[0].split('/')[-1].strip('/')
|
||||
print('Folders: %s' % folders)
|
||||
|
||||
ssh_push = paramiko.SSHClient()
|
||||
ssh_push.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
|
||||
ssh_push.connect(ghost_host,
|
||||
port,
|
||||
username=user_push,
|
||||
password=password_push,
|
||||
allow_agent=False,
|
||||
look_for_keys=False)
|
||||
scp_push = SCPClient(ssh_push.get_transport())
|
||||
|
||||
if parent_folder is not None:
|
||||
print("parent_folder %s" % parent_folder)
|
||||
files = os.listdir(parent_folder)
|
||||
print(files)
|
||||
for file in files:
|
||||
if os.path.isdir(parent_folder+'/'+file) is True:
|
||||
import shutil
|
||||
shutil.move(parent_folder+'/'+file, file)
|
||||
target_folders.append(file)
|
||||
print('Target folders: %s' % target_folders)
|
||||
else:
|
||||
for folder in folders:
|
||||
print(folder)
|
||||
target_folders.append(folder)
|
||||
|
||||
testbeds = list()
|
||||
pdfs = list()
|
||||
high_priority_list = list()
|
||||
low_priority_list = list()
|
||||
images = list()
|
||||
|
||||
for target_folder in target_folders:
|
||||
try:
|
||||
target_file = '%s/kpi.csv' % target_folder
|
||||
print('target file %s' % target_file)
|
||||
df = csvreader.read_csv(file=target_file, sep='\t')
|
||||
csv_testbed = csvreader.get_column(df, 'test-rig')[0]
|
||||
pass_fail = Counter(csvreader.get_column(df, 'pass/fail'))
|
||||
@@ -249,85 +279,92 @@ class GhostRequest:
|
||||
text = text + 'Percentage of tests passed: %s<br />' % (
|
||||
pass_fail['PASS'] / (pass_fail['PASS'] + pass_fail['FAIL']))
|
||||
|
||||
print(csv_testbed)
|
||||
except:
|
||||
pass
|
||||
print("Failure")
|
||||
target_folders.remove(target_folder)
|
||||
break
|
||||
if len(csv_testbed) > 2:
|
||||
testbed = csv_testbed
|
||||
text = text + 'Testbed: %s<br />' % testbed
|
||||
testbeds.append(testbed)
|
||||
if testbed == 'Unknown Testbed':
|
||||
raise UserWarning('Please define your testbed')
|
||||
print('testbed %s' % testbed)
|
||||
|
||||
ssh_push = paramiko.SSHClient()
|
||||
ssh_push.set_missing_host_key_policy(paramiko.client.AutoAddPolicy)
|
||||
ssh_push.connect(ghost_host,
|
||||
port,
|
||||
username=user_push,
|
||||
password=password_push,
|
||||
allow_agent=False,
|
||||
look_for_keys=False)
|
||||
scp_push = SCPClient(ssh_push.get_transport())
|
||||
local_path = '/home/%s/%s/%s' % (user_push, customer, testbed)
|
||||
transport = paramiko.Transport((ghost_host, port))
|
||||
|
||||
transport = paramiko.Transport(ghost_host, port)
|
||||
transport.connect(None, user_push, password_push)
|
||||
sftp = paramiko.sftp_client.SFTPClient.from_transport(transport)
|
||||
print('Local Path: %s' % local_path)
|
||||
try:
|
||||
sftp.mkdir(local_path)
|
||||
except:
|
||||
print('folder %s already exists' % local_path)
|
||||
scp_push.put(target_folder, recursive=True, remote_path=local_path)
|
||||
print(local_path + '/' + target_folder)
|
||||
|
||||
print(local_path)
|
||||
print(target_folder)
|
||||
scp_push.put(target_folder, local_path, recursive=True)
|
||||
files = sftp.listdir(local_path + '/' + target_folder)
|
||||
# print('Files: %s' % files)
|
||||
for file in files:
|
||||
if 'pdf' in file:
|
||||
url = 'http://%s/%s/%s/%s/%s/%s' % (
|
||||
ghost_host, customer.strip('/'), testbed, test_run, target_folder, file)
|
||||
text = text + 'PDF of results: <a href="%s">%s</a><br />' % (url, file)
|
||||
print(url)
|
||||
scp_pull.close()
|
||||
url = 'http://%s/%s/%s/%s/%s' % (
|
||||
ghost_host, customer.strip('/'), testbed, test_run, file)
|
||||
pdfs.append('PDF of results: <a href="%s">%s</a><br />' % (url, file))
|
||||
scp_push.close()
|
||||
self.upload_images(target_folder)
|
||||
for image in self.images:
|
||||
if 'kpi-' in image:
|
||||
if '-print' not in image:
|
||||
text = text + '<img src="%s"></img>' % image
|
||||
images.append('<img src="%s"></img>' % image)
|
||||
self.images = []
|
||||
|
||||
if grafana_token is not None:
|
||||
# get the details of the dashboard through the API, and set the end date to the youngest KPI
|
||||
grafana.list_dashboards()
|
||||
results = csvreader.get_columns(df, ['short-description', 'numeric-score', 'test details', 'test-priority'])
|
||||
|
||||
grafana.create_snapshot(title=grafana_dashboard)
|
||||
time.sleep(3)
|
||||
snapshot = grafana.list_snapshots()[-1]
|
||||
print(snapshot)
|
||||
text = text + '<iframe src="http://%s:3000/dashboard/snapshot/%s" width="100%s" height=1500></iframe><br />' % (
|
||||
grafana_host, snapshot['key'], '%')
|
||||
low_priority = csvreader.filter_df(results, 'test-priority', 'less than', 94)
|
||||
high_priority = csvreader.filter_df(results, 'test-priority', 'greater than or equal to', 95)
|
||||
high_priority_list.append(high_priority)
|
||||
|
||||
results = csvreader.get_columns(df,['short-description','numeric-score','test details','test-priority'])
|
||||
|
||||
low_priority = csvreader.to_html(csvreader.filter_df(results, 'test-priority', 'less than', 94))
|
||||
high_priority = csvreader.to_html(csvreader.filter_df(results, 'test-priority', 'greater than', 95))
|
||||
|
||||
text = text + 'High priority results: %s' % high_priority
|
||||
|
||||
text = text + 'Low priority results: %s' % low_priority
|
||||
low_priority_list.append(low_priority)
|
||||
|
||||
now = date.now()
|
||||
|
||||
high_priority = csvreader.concat(high_priority_list)
|
||||
low_priority = csvreader.concat(low_priority_list)
|
||||
|
||||
high_priority = csvreader.get_columns(high_priority, ['short-description', 'numeric-score', 'test details'])
|
||||
low_priority = csvreader.get_columns(low_priority, ['short-description', 'numeric-score', 'test details'])
|
||||
|
||||
if title is None:
|
||||
title = "%s %s %s %s:%s report" % (now.day, now.month, now.year, now.hour, now.minute)
|
||||
|
||||
# create Grafana Dashboard
|
||||
target_files = []
|
||||
for folder in folders:
|
||||
print(folder)
|
||||
for folder in target_folders:
|
||||
target_files.append(folder.split('/')[-1] + '/kpi.csv')
|
||||
print('Target files: %s' % target_files)
|
||||
grafana.create_custom_dashboard(target_csvs=target_files,
|
||||
title=title)
|
||||
title=title,
|
||||
datasource=grafana_datasource,
|
||||
bucket=grafana_bucket)
|
||||
|
||||
try:
|
||||
text = 'Testbed: %s<br />' % testbeds[0]
|
||||
except:
|
||||
text = ''
|
||||
|
||||
for pdf in pdfs:
|
||||
text = text + pdf
|
||||
|
||||
for image in images:
|
||||
text = text + image
|
||||
|
||||
text = text + 'High priority results: %s' % csvreader.to_html(high_priority)
|
||||
|
||||
if grafana_token is not None:
|
||||
# get the details of the dashboard through the API, and set the end date to the youngest KPI
|
||||
grafana.list_dashboards()
|
||||
|
||||
grafana.create_snapshot(title='Testbed: ' + title)
|
||||
time.sleep(3)
|
||||
snapshot = grafana.list_snapshots()[-1]
|
||||
text = text + '<iframe src="http://%s:3000/dashboard/snapshot/%s" width="100%s" height=1500></iframe><br />' % (
|
||||
grafana_host, snapshot['key'], '%')
|
||||
|
||||
text = text + 'Low priority results: %s' % csvreader.to_html(low_priority)
|
||||
|
||||
self.create_post(title=title,
|
||||
text=text,
|
||||
|
||||
@@ -132,6 +132,49 @@ class GrafanaRequest:
|
||||
print(dictionary)
|
||||
return dictionary
|
||||
|
||||
def maketargets(self,
|
||||
bucket,
|
||||
scriptname,
|
||||
groupBy,
|
||||
index,
|
||||
graph_group,
|
||||
testbed):
|
||||
query = (
|
||||
'from(bucket: "%s")\n '
|
||||
'|> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n '
|
||||
'|> filter(fn: (r) => r["script"] == "%s")\n '
|
||||
'|> group(columns: ["_measurement"])\n '
|
||||
% (bucket, scriptname))
|
||||
queryend = ('|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n '
|
||||
'|> yield(name: "mean")\n ')
|
||||
if graph_group is not None:
|
||||
graphgroup = ('|> filter(fn: (r) => r["Graph-Group"] == "%s")\n' % graph_group)
|
||||
query += graphgroup
|
||||
if testbed is not None:
|
||||
query += ('|> filter(fn: (r) => r["testbed"] == "%s")\n' % testbed)
|
||||
targets = dict()
|
||||
targets['delimiter'] = ','
|
||||
targets['groupBy'] = groupBy
|
||||
targets['header'] = True
|
||||
targets['ignoreUnknown'] = False
|
||||
targets['orderByTime'] = 'ASC'
|
||||
targets['policy'] = 'default'
|
||||
targets['query'] = query + queryend
|
||||
targets['refId'] = dict(enumerate(string.ascii_uppercase, 1))[index + 1]
|
||||
targets['resultFormat'] = "time_series"
|
||||
targets['schema'] = list()
|
||||
targets['skipRows'] = 0
|
||||
targets['tags'] = list()
|
||||
return targets
|
||||
|
||||
def groupby(self, params, grouptype):
|
||||
dic = dict()
|
||||
dic['params'] = list()
|
||||
dic['params'].append(params)
|
||||
dic['type'] = grouptype
|
||||
return dic
|
||||
|
||||
|
||||
def create_custom_dashboard(self,
|
||||
scripts=None,
|
||||
title=None,
|
||||
@@ -174,20 +217,10 @@ class GrafanaRequest:
|
||||
target_csvs = open(graph_groups_file).read().split('\n')
|
||||
graph_groups = self.get_graph_groups(
|
||||
target_csvs) # Get the list of graph groups which are in the tests we ran
|
||||
unit_dict = dict()
|
||||
for csv in target_csvs:
|
||||
if len(csv) > 1:
|
||||
print(csv)
|
||||
unit_dict.update(self.get_units(csv))
|
||||
if target_csvs:
|
||||
print('Target CSVs: %s' % target_csvs)
|
||||
graph_groups = self.get_graph_groups(
|
||||
target_csvs) # Get the list of graph groups which are in the tests we ran
|
||||
unit_dict = dict()
|
||||
for csv in target_csvs:
|
||||
if len(csv) > 1:
|
||||
print(csv)
|
||||
unit_dict.update(self.get_units(csv))
|
||||
for scriptname in graph_groups.keys():
|
||||
for graph_group in graph_groups[scriptname]:
|
||||
panel = dict()
|
||||
@@ -210,14 +243,14 @@ class GrafanaRequest:
|
||||
options = dict()
|
||||
options['alertThreshold'] = True
|
||||
|
||||
#groupBy = list()
|
||||
#groupBy.append(self.groupby('$__interval', 'time'))
|
||||
#groupBy.append(self.groupby('null', 'fill'))
|
||||
groupBy = list()
|
||||
groupBy.append(self.groupby('$__interval', 'time'))
|
||||
groupBy.append(self.groupby('null', 'fill'))
|
||||
|
||||
#targets = list()
|
||||
#counter = 0
|
||||
#new_target = self.maketargets(bucket, scriptname, groupBy, counter, graph_group, testbed)
|
||||
#targets.append(new_target)
|
||||
targets = list()
|
||||
counter = 0
|
||||
new_target = self.maketargets(bucket, scriptname, groupBy, counter, graph_group, testbed)
|
||||
targets.append(new_target)
|
||||
|
||||
fieldConfig = dict()
|
||||
fieldConfig['defaults'] = dict()
|
||||
@@ -274,7 +307,7 @@ class GrafanaRequest:
|
||||
panel['spaceLength'] = 10
|
||||
panel['stack'] = False
|
||||
panel['steppedLine'] = False
|
||||
#panel['targets'] = targets
|
||||
panel['targets'] = targets
|
||||
panel['thresholds'] = list()
|
||||
panel['timeFrom'] = None
|
||||
panel['timeRegions'] = list()
|
||||
|
||||
@@ -6,17 +6,17 @@ PURPOSE: modify ghost database from the command line.
|
||||
SETUP: A Ghost installation which the user has admin access to.
|
||||
EXAMPLE: ./ghost_profile.py --article_text_file text.txt --title Test --authors Matthew --ghost_token SECRET_KEY --host 192.168.1.1
|
||||
|
||||
There is a specific class for uploading wifi capacity graphs called wifi_capacity.
|
||||
There is a specific class for uploading kpi graphs called kpi_to_ghost.
|
||||
|
||||
EXAMPLE: ./ghost_profile.py --ghost_token TOKEN --ghost_host 192.168.100.147
|
||||
--folders /home/lanforge/html-reports/wifi-capacity-2021-06-04-02-51-07
|
||||
--wifi_capacity appl --authors Matthew --title 'wifi capacity 2021 06 04 02 51 07' --server 192.168.93.51
|
||||
--kpi_to_ghost appl --authors Matthew --title 'wifi capacity 2021 06 04 02 51 07' --server 192.168.93.51
|
||||
--user_pull lanforge --password_pull lanforge --customer candela --testbed heather --test_run test-run-6
|
||||
--user_push matt --password_push PASSWORD
|
||||
|
||||
EXAMPLE 2: ./ghost_profile.py --ghost_token TOKEN
|
||||
--ghost_host 192.168.100.147 --server 192.168.93.51 --user_pull lanforge --password_pull lanforge --customer candela
|
||||
--testbed heather --user_push matt --password_push "amount%coverage;Online" --wifi_capacity app
|
||||
--testbed heather --user_push matt --password_push "amount%coverage;Online" --kpi_to_ghost app
|
||||
--folders /home/lanforge/html-reports/wifi-capacity-2021-06-14-10-42-29 --grafana_token TOKEN
|
||||
--grafana_host 192.168.100.201 --grafana_dashboard 'Stidmatt-02'
|
||||
|
||||
@@ -60,43 +60,45 @@ class UseGhost(GhostRequest):
|
||||
text = open(file).read()
|
||||
return self.create_post(title=title, text=text, tags=tags, authors=authors)
|
||||
|
||||
def wifi_capacity(self,
|
||||
authors,
|
||||
folders,
|
||||
title,
|
||||
server_pull,
|
||||
ghost_host,
|
||||
port,
|
||||
user_pull,
|
||||
password_pull,
|
||||
user_push,
|
||||
password_push,
|
||||
customer,
|
||||
testbed,
|
||||
test_run,
|
||||
grafana_dashboard,
|
||||
grafana_token,
|
||||
grafana_host,
|
||||
grafana_port):
|
||||
def kpi(self,
|
||||
authors,
|
||||
folders,
|
||||
parent_folder,
|
||||
title,
|
||||
server_pull,
|
||||
ghost_host,
|
||||
port,
|
||||
user_push,
|
||||
password_push,
|
||||
customer,
|
||||
testbed,
|
||||
test_run,
|
||||
grafana_dashboard,
|
||||
grafana_token,
|
||||
grafana_host,
|
||||
grafana_port,
|
||||
datasource,
|
||||
grafana_bucket):
|
||||
target_folders = list()
|
||||
return self.wifi_capacity_to_ghost(authors,
|
||||
folders,
|
||||
title,
|
||||
server_pull,
|
||||
ghost_host,
|
||||
port,
|
||||
user_pull,
|
||||
password_pull,
|
||||
user_push,
|
||||
password_push,
|
||||
customer,
|
||||
testbed,
|
||||
test_run,
|
||||
target_folders,
|
||||
grafana_dashboard,
|
||||
grafana_token,
|
||||
grafana_host,
|
||||
grafana_port)
|
||||
return self.kpi_to_ghost(authors,
|
||||
folders,
|
||||
parent_folder,
|
||||
title,
|
||||
server_pull,
|
||||
ghost_host,
|
||||
port,
|
||||
user_push,
|
||||
password_push,
|
||||
customer,
|
||||
testbed,
|
||||
test_run,
|
||||
target_folders,
|
||||
grafana_dashboard,
|
||||
grafana_token,
|
||||
grafana_host,
|
||||
grafana_port,
|
||||
datasource,
|
||||
grafana_bucket)
|
||||
|
||||
|
||||
def main():
|
||||
@@ -125,12 +127,10 @@ def main():
|
||||
optional.add_argument('--image', default=None)
|
||||
optional.add_argument('--folder', default=None)
|
||||
optional.add_argument('--custom_post', default=None)
|
||||
optional.add_argument('--wifi_capacity', default=None)
|
||||
optional.add_argument('--kpi_to_ghost', help='Generate a Ghost report from KPI spreadsheets', action="store_true")
|
||||
optional.add_argument('--folders', action='append', default=None)
|
||||
optional.add_argument('--server_pull')
|
||||
optional.add_argument('--port', default=22)
|
||||
optional.add_argument('--user_pull', default='lanforge')
|
||||
optional.add_argument('--password_pull', default='lanforge')
|
||||
optional.add_argument('--user_push')
|
||||
optional.add_argument('--password_push')
|
||||
optional.add_argument('--customer')
|
||||
@@ -140,6 +140,9 @@ def main():
|
||||
optional.add_argument('--grafana_token', default=None)
|
||||
optional.add_argument('--grafana_host', default=None)
|
||||
optional.add_argument('--grafana_port', default=3000)
|
||||
optional.add_argument('--parent_folder', default=None)
|
||||
optional.add_argument('--datasource', default='InfluxDB')
|
||||
optional.add_argument('--grafana_bucket', default=None)
|
||||
optional.add_argument('--debug')
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -165,24 +168,25 @@ def main():
|
||||
if args.folder is not None:
|
||||
Ghost.upload_images(args.folder)
|
||||
|
||||
if args.wifi_capacity is not None:
|
||||
Ghost.wifi_capacity(args.authors,
|
||||
args.folders,
|
||||
args.title,
|
||||
args.server_pull,
|
||||
args.ghost_host,
|
||||
args.port,
|
||||
args.user_pull,
|
||||
args.password_pull,
|
||||
args.user_push,
|
||||
args.password_push,
|
||||
args.customer,
|
||||
args.testbed,
|
||||
args.test_run,
|
||||
args.grafana_dashboard,
|
||||
args.grafana_token,
|
||||
args.grafana_host,
|
||||
args.grafana_port)
|
||||
if args.kpi_to_ghost is True:
|
||||
Ghost.kpi(args.authors,
|
||||
args.folders,
|
||||
args.parent_folder,
|
||||
args.title,
|
||||
args.server_pull,
|
||||
args.ghost_host,
|
||||
args.port,
|
||||
args.user_push,
|
||||
args.password_push,
|
||||
args.customer,
|
||||
args.testbed,
|
||||
args.test_run,
|
||||
args.grafana_dashboard,
|
||||
args.grafana_token,
|
||||
args.grafana_host,
|
||||
args.grafana_port,
|
||||
args.datasource,
|
||||
args.grafana_bucket)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -22,47 +22,6 @@ from LANforge.lfcli_base import LFCliBase
|
||||
import string
|
||||
|
||||
class UseGrafana(GrafanaRequest):
|
||||
def groupby(self, params, grouptype):
|
||||
dic = dict()
|
||||
dic['params'] = list()
|
||||
dic['params'].append(params)
|
||||
dic['type'] = grouptype
|
||||
return dic
|
||||
|
||||
def maketargets(self,
|
||||
bucket,
|
||||
scriptname,
|
||||
groupBy,
|
||||
index,
|
||||
graph_group,
|
||||
testbed):
|
||||
query = (
|
||||
'from(bucket: "%s")\n '
|
||||
'|> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n '
|
||||
'|> filter(fn: (r) => r["script"] == "%s")\n '
|
||||
'|> group(columns: ["_measurement"])\n '
|
||||
% (bucket, scriptname))
|
||||
queryend = ('|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n '
|
||||
'|> yield(name: "mean")\n ')
|
||||
if graph_group is not None:
|
||||
graphgroup = ('|> filter(fn: (r) => r["Graph-Group"] == "%s")\n' % graph_group)
|
||||
query += graphgroup
|
||||
if testbed is not None:
|
||||
query += ('|> filter(fn: (r) => r["testbed"] == "%s")\n' % testbed)
|
||||
targets = dict()
|
||||
targets['delimiter'] = ','
|
||||
targets['groupBy'] = groupBy
|
||||
targets['header'] = True
|
||||
targets['ignoreUnknown'] = False
|
||||
targets['orderByTime'] = 'ASC'
|
||||
targets['policy'] = 'default'
|
||||
targets['query'] = query + queryend
|
||||
targets['refId'] = dict(enumerate(string.ascii_uppercase, 1))[index + 1]
|
||||
targets['resultFormat'] = "time_series"
|
||||
targets['schema'] = list()
|
||||
targets['skipRows'] = 0
|
||||
targets['tags'] = list()
|
||||
return targets
|
||||
|
||||
|
||||
def read_csv(self, file):
|
||||
|
||||
Reference in New Issue
Block a user