Skip to content
This repository has been archived by the owner on Mar 4, 2024. It is now read-only.

Commit

Permalink
Merge pull request #30 from stopal-r7/empty_query_result_failing_bug_fix
Browse files Browse the repository at this point in the history
Empty query result failing bug fix
  • Loading branch information
pquinn-r7 committed Dec 13, 2016
2 parents dfdf6a5 + 956b6b7 commit 99990aa
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 47 deletions.
43 changes: 20 additions & 23 deletions lecli/query_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,13 @@ def handle_response(response, progress_bar):
else:
progress_bar.update(100)
progress_bar.render_finish()
print_response(response)
print_response(response)
if 'links' in response.json():
next_url = response.json()['links'][0]['href']
next_response = fetch_results(next_url)
handle_response(next_response, progress_bar)
return
return
elif response.status_code == 202:
continue_request(response, progress_bar)
return


def continue_request(response, progress_bar):
Expand All @@ -72,7 +69,7 @@ def fetch_results(provided_url):
response = requests.get(provided_url, headers=api_utils.generate_headers('rw'))
return response
except requests.exceptions.RequestException as error:
print error
click.echo(error)
exit(1)


Expand All @@ -94,7 +91,7 @@ def get_recent_events(log_keys, last_x_seconds=1200, time_range=None):
with click.progressbar(length=100, label='Progress') as progress_bar:
handle_response(response, progress_bar)
except requests.exceptions.RequestException as error:
print error
click.echo(error)
exit(1)


Expand Down Expand Up @@ -122,7 +119,7 @@ def get_events(log_keys, time_from=None, time_to=None, date_from=None, date_to=N
with click.progressbar(length=100, label='Progress') as progress_bar:
handle_response(response, progress_bar)
except requests.exceptions.RequestException as error:
print error
click.echo(error)
exit(1)


Expand All @@ -149,7 +146,7 @@ def post_query(log_keys, query_string, time_from=None, time_to=None, date_from=N
with click.progressbar(length=100, label='Progress') as progress_bar:
handle_response(response, progress_bar)
except requests.exceptions.RequestException as error:
print error
click.echo(error)
exit(1)


Expand All @@ -173,10 +170,11 @@ def prettyprint_events(response):
human_ts = time_value.strftime('%Y-%m-%d %H:%M:%S')
try:
message = json.loads(event['message'])
print colored(str(human_ts), 'red') + '\t' + \
colored(json.dumps(message, indent=4, separators={':', ';'}), 'white')
click.echo(
colored(str(human_ts), 'red') + '\t' +
colored(json.dumps(message, indent=4, separators={':', ';'}), 'white'))
except ValueError:
print colored(str(human_ts), 'red') + '\t' + colored(event['message'], 'white')
click.echo(colored(str(human_ts), 'red') + '\t' + colored(event['message'], 'white'))


def prettyprint_statistics(response):
Expand All @@ -192,29 +190,28 @@ def prettyprint_statistics(response):
# Handle timeseries
if len(data['statistics']['timeseries']) != 0:
# Extract keys
timeseries_key = data['statistics']['timeseries'].keys()[0]
stats_key = data['statistics']['stats'].keys()[0]
num_timeseries_values = len(data['statistics']['timeseries'].get(timeseries_key))
stats_calc_key = data['statistics']['stats'].get(stats_key).keys()[0]
total = data['statistics']['stats'].get(stats_key).get(stats_calc_key)
time_range = time_to - time_from

print 'Total' + ': ' + str(total)
stats_calc_value = data['statistics']['stats'].get(stats_key).values()
total = stats_calc_value[0] if len(stats_calc_value) != 0 else 0
click.echo('Total: %s' % total)

print 'Timeseries: '
click.echo('Timeseries: ')
timeseries_key = data['statistics']['timeseries'].keys()[0]
time_range = time_to - time_from
num_timeseries_values = len(data['statistics']['timeseries'].get(timeseries_key))
for index, value in enumerate(data['statistics']['timeseries'].get(timeseries_key)):
timestamp = (time_from + (time_range / num_timeseries_values) * (index + 1)) / 1000
time_value = datetime.datetime.fromtimestamp(timestamp)
human_ts = time_value.strftime('%Y-%m-%d %H:%M:%S')
print human_ts + ': ' + str(value.values()[0])
click.echo(human_ts + ': ' + str(value.values()[0]))

# Handle Groups
elif len(data['statistics']['groups']) != 0:
for group in data['statistics']['groups']:
for key, value in group.iteritems():
print str(key) + ':'
click.echo(str(key) + ':')
for innerkey, innervalue in value.iteritems():
print '\t' + str(innerkey) + ': ' + str(innervalue)
click.echo('\t' + str(innerkey) + ': ' + str(innervalue))

else:
print json.dumps(response.json(), indent=4, separators={':', ';'})
click.echo(json.dumps(response.json(), indent=4, separators={':', ';'}))
75 changes: 51 additions & 24 deletions tests/examples/response_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,33 @@
}
}

empty_ts_response = {
'statistics': {
'from': 123123,
'to': 123123,
'count': 0.0,
'stats': {
'global_timeseries':
{} # empty global timeseries object
},
'granularity': 120000,
'timeseries': {
'global_timeseries': [
{'count': 0.0},
{'count': 0.0},
{'count': 0.0},
{'count': 0.0},
{'count': 0.0},
{'count': 0.0},
{'count': 0.0},
{'count': 0.0},
{'count': 0.0},
{'count': 0.0}
]
}
}
}

events_response = {
'events': [
{'timestamp': 1432080000011, 'message': 'Message contents1'},
Expand All @@ -114,31 +141,31 @@
}

usage_response = {
"id": "123456789012345678901234567890123456",
"name": "Test",
"period": {
"to": "2016-06-01",
"from": "2016-01-01"
},
"period_usage": 170129010,
"daily_usage": [
{
"usage": 30618,
"day": "2016-06-01"
},
{
"usage": 6397,
"day": "2016-05-31"
},
{
"usage": 1606,
"day": "2016-05-30"
"id": "123456789012345678901234567890123456",
"name": "Test",
"period": {
"to": "2016-06-01",
"from": "2016-01-01"
},
{
"usage": 2406,
"day": "2016-05-29"
}
]
"period_usage": 170129010,
"daily_usage": [
{
"usage": 30618,
"day": "2016-06-01"
},
{
"usage": 6397,
"day": "2016-05-31"
},
{
"usage": 1606,
"day": "2016-05-30"
},
{
"usage": 2406,
"day": "2016-05-29"
}
]
}

saved_query_response = {
Expand Down
16 changes: 16 additions & 0 deletions tests/test_queryapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,22 @@ def test_prettyprint_statistics_timeseries(capsys):
teardown_httpretty()


def test_prettyprint_statistics_timeseries_with_empty_result(capsys):
setup_httpretty()

httpretty.register_uri(httpretty.GET, misc_ex.MOCK_QUERYAPI_URL,
content_type='application/json',
body=json.dumps(resp_ex.empty_ts_response))
response = requests.get(misc_ex.MOCK_QUERYAPI_URL)
query_api.prettyprint_statistics(response)

out, err = capsys.readouterr()
assert "Total" in out
assert "Timeseries" in out

teardown_httpretty()


def test_prettyprint_events(capsys):
setup_httpretty()

Expand Down

0 comments on commit 99990aa

Please sign in to comment.