Skip to content
Snippets Groups Projects
banner.py 5.27 KiB
Newer Older
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  banner.py
#
#  Copyright 2015 CESNET z. s. p. o.
#  Author Jakub Cegan cegan@ics.muni.cz
#
#


def main(args):

    SVGNS = "http://www.w3.org/2000/svg"

    # We set up path and names
Pavel Kácha's avatar
Pavel Kácha committed
    banner_path = "/var/www/banner/"
    banner_name_cz = "banner-cz.svg"
    banner_name_en = "banner-en.svg"
    template_name  = "banner-template.svg"

    banners = [{'name': banner_name_en, 'database' : "Database Size:", 'events' : "Number of Events:", 'senders' : "Number of Senders:", 'receivers' : "Number of Receivers:", 'created' : "Banner Created:"}, {'name': banner_name_cz, 'database' : "Velikost databáze:", 'events' : "Suma všech událostí:", 'senders' : "Odesílající klienti:", 'receivers' : "Přijímající klienti:", 'created' : "Banner vytvořen:"}]

    # We have DB credentials
    host, database, user, password = sys.argv[1:]

    db = MySQLdb.connect(host = host, user = user, passwd = password, db = database)
    cursor = db.cursor()

    cursor.execute('SELECT count(*) AS reader_count FROM clients WHERE clients.read <> 0 AND clients.valid <> 0 AND clients.test = 0;')
    row = cursor.fetchone()
    receivers = str(row[0])
    #receivers = str(random.randint(0,100))

    cursor.execute('SELECT count(*) AS writer_count FROM clients WHERE clients.write <> 0 AND clients.valid <> 0 AND clients.test = 0;')
    row = cursor.fetchone()
    senders = str(row[0])
    #senders = str(random.randint(0,100))

    cursor.execute('SELECT sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2)) AS db_size FROM information_schema.tables WHERE table_schema = "warden3" AND table_name="events"')
    row = cursor.fetchone()
    database_size = str(row[0]) + ' GB'
    #database_size = str(random.randint(0,50)) + ' GB'

    cursor.execute('SELECT max(id) - min(id) AS event_count FROM events;')
    row = cursor.fetchone()
    events =  str(row[0])
    #events = str(random.randint(0,10000000))
    #cursor.execute('SELECT max(id) AS last_id FROM events;')
    #row = cursor.fetchone()
    #last_event =  str(row[0])

    time = datetime.datetime.today().strftime("%Y-%m-%dT%H:%M:%S%Z")

    for banner in banners:

      xml_data = etree.parse(template_name)

      # We search for element 'text' with id='tile_text' in SVG namespace

      # Fill texts
      find_text = etree.ETXPath("//{%s}text[@id='database-text']" % (SVGNS))
Pavel Kácha's avatar
Pavel Kácha committed
      find_text(xml_data)[0].text = banner['database']
      find_text = etree.ETXPath("//{%s}text[@id='events-text']" % (SVGNS))
Pavel Kácha's avatar
Pavel Kácha committed
      find_text(xml_data)[0].text = banner['events']
      find_text = etree.ETXPath("//{%s}text[@id='senders-text']" % (SVGNS))
Pavel Kácha's avatar
Pavel Kácha committed
      find_text(xml_data)[0].text = banner['senders']
      find_text = etree.ETXPath("//{%s}text[@id='receivers-text']" % (SVGNS))
Pavel Kácha's avatar
Pavel Kácha committed
      find_text(xml_data)[0].text = banner['receivers']
      find_text = etree.ETXPath("//{%s}text[@id='latest-text']" % (SVGNS))
Pavel Kácha's avatar
Pavel Kácha committed
      find_text(xml_data)[0].text = banner['created']

      # Insert values from database
      find_text = etree.ETXPath("//{%s}text[@id='database']" % (SVGNS))
      find_text(xml_data)[0].text = database_size
      find_text = etree.ETXPath("//{%s}text[@id='events']" % (SVGNS))
      find_text(xml_data)[0].text = events
      find_text = etree.ETXPath("//{%s}text[@id='senders']" % (SVGNS))
      find_text(xml_data)[0].text = senders
      find_text = etree.ETXPath("//{%s}text[@id='receivers']" % (SVGNS))
      find_text(xml_data)[0].text = receivers
      find_text = etree.ETXPath("//{%s}text[@id='latest']" % (SVGNS))
      find_text(xml_data)[0].text = time

      # Write edited svg into file
      new_svg = etree.tostring(xml_data)
      xml_data.write(banner_path + banner['name'])

    # We will not use pygal graphs for now
    #chart = pygal.StackedLine(fill=True, style=CleanStyle, x_label_rotation=40, tooltip_border_radius=10) # Setting style here is not necessary
    #chart.title = 'Events in last 24 hours'
    #chart.x_labels = map(lambda d: d.strftime('%H:%M:%S'), reversed([base - datetime.timedelta(hours=x) for x in range(0, 24)]))
    #chart.add('Event type  A', [random.randint(0,5000) for r in xrange(24)])
    #chart.add('Event type B', [random.randint(0,5000) for r in xrange(24)])
    #chart.add('Event type C', [random.randint(0,5000) for r in xrange(24)])
    #chart.add('Other types',  [random.randint(0,5000) for r in xrange(24)])
    #chart.render_to_file('chart_hours.svg') # Save the svg to a file

    #chart = pygal.StackedLine(fill=True, style=CleanStyle, x_label_rotation=40, tooltip_border_radius=10) # Setting style here is not necessary
    #chart.title = 'Events in last month'
    #chart.x_labels = map(lambda d: d.strftime('%d. %m. %Y'), reversed([base - datetime.timedelta(days=x) for x in range(0, 31)]))
    #chart.add('Event type A', [random.randint(0,5000) for r in xrange(31)])
    #chart.add('Event type B', [random.randint(0,5000) for r in xrange(31)])
    #chart.add('Event type C', [random.randint(0,5000) for r in xrange(31)])
    #chart.add('Other types',  [random.randint(0,5000) for r in xrange(31)])
    #chart.render_to_file('chart_month.svg') # Save the svg to a file

    return 0

if __name__ == '__main__':
    import sys
    import random
    import datetime
    import MySQLdb
    from lxml import etree
    #from pygal.style import CleanStyle
    sys.exit(main(sys.argv))