1
1
# -*- coding: utf-8 -*-
2
- # (c) 2019 Andreas Motl <[email protected] >
2
+ # (c) 2019-2021 Andreas Motl <[email protected] >
3
3
# License: GNU Affero General Public License, Version 3
4
- import os
5
4
import json
6
5
import logging
6
+ import os
7
+ from collections import OrderedDict
7
8
from functools import partial
9
+ from operator import itemgetter
8
10
from typing import List
9
11
12
+ from docopt import DocoptExit , docopt
10
13
from tabulate import tabulate
11
- from operator import itemgetter
12
- from collections import OrderedDict
13
- from docopt import docopt , DocoptExit
14
14
15
15
from grafana_wtf import __appname__ , __version__
16
16
from grafana_wtf .core import GrafanaWtf
17
17
from grafana_wtf .report import WtfReport
18
18
from grafana_wtf .tabular_report import TabularReport
19
- from grafana_wtf .util import normalize_options , setup_logging , configure_http_logging , read_list , yaml_dump
19
+ from grafana_wtf .util import (
20
+ configure_http_logging ,
21
+ normalize_options ,
22
+ read_list ,
23
+ setup_logging ,
24
+ yaml_dump ,
25
+ )
20
26
21
27
log = logging .getLogger (__name__ )
22
28
@@ -126,39 +132,41 @@ def run():
126
132
"""
127
133
128
134
# Parse command line arguments
129
- options = normalize_options (docopt (run .__doc__ , version = __appname__ + ' ' + __version__ ))
135
+ options = normalize_options (docopt (run .__doc__ , version = f" { __appname__ } { __version__ } " ))
130
136
131
137
# Setup logging
132
- debug = options .get (' debug' )
138
+ debug = options .get (" debug" )
133
139
log_level = logging .INFO
134
140
if debug :
135
141
log_level = logging .DEBUG
136
142
setup_logging (log_level )
137
143
138
144
# Debugging
139
- log .debug (' Options: {}' .format (json .dumps (options , indent = 4 )))
145
+ log .debug (" Options: {}" .format (json .dumps (options , indent = 4 )))
140
146
141
147
configure_http_logging (options )
142
148
143
- grafana_url = options [' grafana-url' ] or os .getenv (' GRAFANA_URL' )
144
- grafana_token = options [' grafana-token' ] or os .getenv (' GRAFANA_TOKEN' )
149
+ grafana_url = options [" grafana-url" ] or os .getenv (" GRAFANA_URL" )
150
+ grafana_token = options [" grafana-token" ] or os .getenv (" GRAFANA_TOKEN" )
145
151
146
152
# Compute cache expiration time.
147
153
try :
148
- cache_ttl = int (options [' cache-ttl' ])
154
+ cache_ttl = int (options [" cache-ttl" ])
149
155
except :
150
- if not options [' cache-ttl' ] or ' infinite' .startswith (options [' cache-ttl' ].lower ()):
156
+ if not options [" cache-ttl" ] or " infinite" .startswith (options [" cache-ttl" ].lower ()):
151
157
cache_ttl = None
152
158
else :
153
159
raise
154
160
155
161
# Sanity checks
156
162
if grafana_url is None :
157
- raise DocoptExit ('No Grafana URL given. Please use "--grafana-url" option or environment variable "GRAFANA_URL".' )
163
+ raise DocoptExit (
164
+ 'No Grafana URL given. Please use "--grafana-url" option or environment variable "GRAFANA_URL".'
165
+ )
158
166
159
167
engine = GrafanaWtf (grafana_url , grafana_token )
160
- engine .enable_cache (expire_after = cache_ttl , drop_cache = options [' drop-cache' ])
161
- engine .enable_concurrency (int (options [' concurrency' ]))
168
+ engine .enable_cache (expire_after = cache_ttl , drop_cache = options [" drop-cache" ])
169
+ engine .enable_concurrency (int (options [" concurrency" ]))
162
170
engine .setup ()
163
171
164
172
if options .replace :
@@ -195,7 +203,7 @@ def run():
195
203
if options .log :
196
204
engine .scan_dashboards ()
197
205
entries = engine .log (dashboard_uid = options .dashboard_uid )
198
- entries = sorted (entries , key = itemgetter (' datetime' ), reverse = True )
206
+ entries = sorted (entries , key = itemgetter (" datetime" ), reverse = True )
199
207
200
208
if options .number is not None :
201
209
count = int (options .number )
@@ -212,7 +220,7 @@ def run():
212
220
output = tabulate (entries , headers = "keys" , tablefmt = table_format )
213
221
214
222
else :
215
- raise ValueError (f" Unknown output format \ "{ output_format } \" " )
223
+ raise ValueError (f' Unknown output format "{ output_format } "' )
216
224
217
225
print (output )
218
226
@@ -242,7 +250,7 @@ def output_results(output_format: str, results: List):
242
250
output = yaml_dump (results )
243
251
244
252
else :
245
- raise ValueError (f" Unknown output format \ "{ output_format } \" " )
253
+ raise ValueError (f' Unknown output format "{ output_format } "' )
246
254
247
255
print (output )
248
256
@@ -261,33 +269,37 @@ def get_table_format(output_format):
261
269
def to_table (entries ):
262
270
for entry in entries :
263
271
item = entry
264
- name = item [' title' ]
265
- if item [' folder' ]:
266
- name = item [' folder' ].strip () + ' » ' + name .strip ()
267
- item [' name' ] = name .strip (' 🤓' )
268
- #del item['url']
269
- del item [' folder' ]
270
- del item [' title' ]
271
- del item [' version' ]
272
+ name = item [" title" ]
273
+ if item [" folder" ]:
274
+ name = item [" folder" ].strip () + " » " + name .strip ()
275
+ item [" name" ] = name .strip (" 🤓" )
276
+ # del item['url']
277
+ del item [" folder" ]
278
+ del item [" title" ]
279
+ del item [" version" ]
272
280
yield item
273
281
274
282
275
283
def compact_table (entries , format ):
276
- seperator = ' \n '
277
- if format .endswith (' pipe' ):
278
- seperator = ' <br/>'
284
+ seperator = " \n "
285
+ if format .endswith (" pipe" ):
286
+ seperator = " <br/>"
279
287
for entry in entries :
280
288
item = OrderedDict ()
281
- if format .endswith (' pipe' ):
282
- link = ' [{}]({})' .format (entry [' name' ], entry [' url' ])
289
+ if format .endswith (" pipe" ):
290
+ link = " [{}]({})" .format (entry [" name" ], entry [" url" ])
283
291
else :
284
- link = 'Name: {}\n URL: {}' .format (entry ['name' ], entry ['url' ])
285
- item ['Dashboard' ] = seperator .join ([
286
- 'Notes: {}' .format (entry ['message' ].capitalize () or 'n/a' ),
287
- link ,
288
- ])
289
- item ['Update' ] = seperator .join ([
290
- 'User: {}' .format (entry ['user' ]),
291
- 'Date: {}' .format (entry ['datetime' ]),
292
- ])
292
+ link = "Name: {}\n URL: {}" .format (entry ["name" ], entry ["url" ])
293
+ item ["Dashboard" ] = seperator .join (
294
+ [
295
+ "Notes: {}" .format (entry ["message" ].capitalize () or "n/a" ),
296
+ link ,
297
+ ]
298
+ )
299
+ item ["Update" ] = seperator .join (
300
+ [
301
+ "User: {}" .format (entry ["user" ]),
302
+ "Date: {}" .format (entry ["datetime" ]),
303
+ ]
304
+ )
293
305
yield item
0 commit comments