Odyssey
Functions | Variables
web_stats Namespace Reference

Functions

def collect_and_log ()
 
def __create_es_connection__ ()
 
def search_es (es_conn)
 
def extract_messages_from_results (results)
 
def map_messages_into_bins (messages)
 
def process_access_log_bins (bins)
 
def write_access_log_file (filename, lines)
 

Variables

 LOGGER = logging.getLogger(__name__)
 
 ELASTICSEARCH_URL = os.environ['ELASTICSEARCH_URL']
 
 LOG_OUTPUT_DIR = os.environ.get('LOG_OUTPUT_DIR')
 
 UID = pwd.getpwnam('www-data').pw_uid
 

Detailed Description

Collect web stats from elasticsearch for later parsing

Function Documentation

◆ collect_and_log()

def web_stats.collect_and_log ( )
Collect web stats and write to log

Definition at line 22 of file web_stats.py.

22 def collect_and_log():
23  '''Collect web stats and write to log'''
24  es_conn = __create_es_connection__()
25  access_log = os.path.join(LOG_OUTPUT_DIR, 'access_log')
26  assert es_conn.ping()
27  compose(partial(write_access_log_file, access_log),
28  extract_messages_from_results,
29  search_es)(es_conn)
30 
31 

◆ extract_messages_from_results()

def web_stats.extract_messages_from_results (   results)
pull messages from es search results

   Returns a generator for results.

Definition at line 61 of file web_stats.py.

61 def extract_messages_from_results(results):
62  '''pull messages from es search results
63 
64  Returns a generator for results.
65  '''
66  return (hit['_source']['message'] for hit in results['hits']['hits'])
67 
68 

◆ map_messages_into_bins()

def web_stats.map_messages_into_bins (   messages)
map log items (messages) into "bins"

Definition at line 69 of file web_stats.py.

69 def map_messages_into_bins(messages):
70  '''map log items (messages) into "bins"'''
71  bins = {}
72  for message in messages:
73  # Probably an improper split...
74  key = message.split('-')[1].strip() or "default"
75  if key in bins:
76  bins[key].extend([message])
77  else:
78  bins[key] = [message]
79  return bins
80 
81 

◆ process_access_log_bins()

def web_stats.process_access_log_bins (   bins)
process bins and write access logs

Definition at line 82 of file web_stats.py.

82 def process_access_log_bins(bins):
83  '''process bins and write access logs'''
84  if not os.path.exists(LOG_OUTPUT_DIR):
85  os.mkdir(LOG_OUTPUT_DIR)
86  for key in bins.keys():
87  filename = os.path.join(LOG_OUTPUT_DIR, '%s_access.log' % key)
88  write_access_log_file(filename, bins[key])
89 
90 

◆ search_es()

def web_stats.search_es (   es_conn)
perform es search

Definition at line 38 of file web_stats.py.

38 def search_es(es_conn):
39  '''perform es search'''
40  assert es_conn
41  now = datetime.now()
42  yesterday = now - timedelta(days=1)
43  day_before_yesterday = yesterday - timedelta(days=1)
44  query_body = {
45  "query": {
46  "bool": {
47  "filter": [
48  {"match": {"image_tag": "odyssey_web"}},
49  {"range": {"timestamp": {
50  # pylint: disable=no-member
51  "gte": day_before_yesterday.isoformat(),
52  "lte": yesterday.isoformat()
53  }}},
54  ]
55  }
56  }
57  }
58  return es_conn.search(body=query_body)
59 
60 

◆ write_access_log_file()

def web_stats.write_access_log_file (   filename,
  lines 
)
Write out access log

Definition at line 91 of file web_stats.py.

91 def write_access_log_file(filename, lines):
92  '''Write out access log'''
93  with open(filename, 'w') as access_log:
94  access_log.write('\n'.join(lines))
95  return filename
96 
97