Skip to content

Instantly share code, notes, and snippets.

@kornicameister
Created March 9, 2016 11:45
Show Gist options
  • Save kornicameister/50d1261b84106e04cca6 to your computer and use it in GitHub Desktop.
Save kornicameister/50d1261b84106e04cca6 to your computer and use it in GitHub Desktop.
Pick/Merge dimensions in monasca_log_api
import random
import string
import time
MSG_LEN = 1000
LOG_COUNT = 100000
def timer(fun, *args):
start = time.time()
_ = fun(*args)
end = time.time()
return end - start
def gen_random_msg():
return ''.join(random.choice(string.lowercase) for _ in range(MSG_LEN))
def gen_logs(no_local_dims=False):
logs = []
for it in xrange(LOG_COUNT):
log_entry = {
'message': gen_random_msg()
}
if not no_local_dims:
log_entry['dimensions'] = {
'path': '/var/log/some_app/logfile.log',
'application_type': 'some_app',
'log_level': 'DEBUG'
}
logs.append(log_entry)
return logs
def merge(request):
global_dims = request.get('dimensions', {})
logs = request.get('logs', [])
for log in logs:
local_dims = log.get('dimensions', {})
dims = global_dims.copy()
dims.update(local_dims)
log['dimensions'] = dims
def pick(request):
global_dims = request.get('dimensions', {})
logs = request.get('logs', [])
for log in logs:
local_dims = log.get('dimensions', {})
dims = local_dims if local_dims else global_dims
log['dimensions'] = dims.copy()
def diff(ti_1, ti_2):
return abs(((ti_2-ti_1)/ti_1)*100.0)
##################### test methods ######################
def no_globals_only_locals():
print 'no_globals_only_locals'
log_request = {
'logs': gen_logs()
}
ti_1 = timer(merge, log_request)
ti_2 = timer(pick, log_request)
print '\tmerge', '\t >> \t', ti_1, ' s'
print '\tpick', '\t >> \t', ti_2, ' s'
print '\tdiff', '\t >> \t', diff(ti_1, ti_2), ' %'
def global_and_locals():
print 'global_and_locals'
log_request = {
'dimensions': {
'hostname': 'localhost',
'host_ip': '127.0.0.1',
'dir': '/var/log'
},
'logs': gen_logs()
}
ti_1 = timer(merge, log_request)
ti_2 = timer(pick, log_request)
print '\tmerge', '\t >> \t', ti_1, ' s'
print '\tpick', '\t >> \t', ti_2, ' s'
print '\tdiff', '\t >> \t', diff(ti_1, ti_2), ' %'
def globals_no_locals():
print 'globals_no_locals'
log_request = {
'dimensions': {
'hostname': 'localhost',
'host_ip': '127.0.0.1',
'dir': '/var/log'
},
'logs': gen_logs(True)
}
ti_1 = timer(merge, log_request)
ti_2 = timer(pick, log_request)
print '\tmerge', '\t >> \t', ti_1, ' s'
print '\tpick', '\t >> \t', ti_2, ' s'
print '\tdiff', '\t >> \t', diff(ti_1, ti_2), ' %'
if __name__ == '__main__':
no_globals_only_locals()
global_and_locals()
globals_no_locals()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment