summaryrefslogblamecommitdiffstats
path: root/import.py
blob: 65bafa5c3e9ea0dfd228a820fd8aab35c3677df0 (plain) (tree)















































































































































































                                                                                                                                                         
#!/usr/bin/env python3

import sys
import os
import json
import re
import pymysql

with open(sys.argv[1], 'r') as f:
    data = json.load(f)

filename = os.path.basename(sys.argv[1])

date = re.search('^[0-9]{4}-[0-9]{2}-[0-9]{2}', filename).group(0)
ip = re.search('_([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})_', filename).group(1)

db = pymysql.connect('mysql.oebsrv.int.intranet', 'bwlehrpool', 'weav3Nu8ShaifaePh6aiqu6aetei7e', 'bwlehrpool')
cursor = db.cursor(pymysql.cursors.DictCursor)

# Add report to database
try:
    cursor.execute("INSERT INTO reports(date,ip,version) VALUES(%s, %s, %s)",(
            date,
            ip,
            data["version"]
        ))
except pymysql.err.IntegrityError:
    print("Report is already in database!")
    exit(1)
cursor.execute("SELECT LAST_INSERT_ID() as id")
reportId = cursor.fetchone()["id"]

# Add server information to database
cursor.execute("INSERT INTO server(report, cpuCount, cpuModel, uptime, memTotal, memFree, swapTotal, swapUsed) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",(
        reportId,
        data["server"]["cpuCount"],
        data["server"]["cpuModel"],
        data["server"]["uptime"],
        data["server"]["memTotal"],
        data["server"]["memFree"],
        data["server"]["swapTotal"],
        data["server"]["swapUsed"]
    ))

# Loop timeframes
for i in [7, 30, 90]:
    iStr = "days" + str(i)

    # Add total
    cursor.execute("""INSERT INTO total(report, days, totalTime, totalOffTime, totalSessionTime,
                        totalStandbyTime, longSessions, shortSessions, totalIdleTime, medianSessionLength,
                        uniqueUsers) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""",(
            reportId,
            i,
            data[iStr]["total"]["totalTime"],
            data[iStr]["total"]["totalOffTime"],
            data[iStr]["total"]["totalSessionTime"],
            data[iStr]["total"]["totalStandbyTime"],
            data[iStr]["total"]["longSessions"],
            data[iStr]["total"]["shortSessions"],
            data[iStr]["total"]["totalIdleTime"],
            data[iStr]["total"]["medianSessionLength"],
            data[iStr]["total"]["uniqueUsers"],
        ))

    # Add Per location
    for location in data[iStr]["perLocation"]:
        cursor.execute("""INSERT INTO perLocation(report, days, locationname, totalTime, totalOffTime,
                            totalSessionTime, totalStandbyTime, longSessions, shortSessions, totalIdleTime, medianSessionLength)
                            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""",(
                reportId,
                i,
                location["locationname"],
                location["totalTime"],
                location["totalOffTime"],
                location["totalSessionTime"],
                location["totalStandbyTime"],
                location["longSessions"],
                location["shortSessions"],
                location["totalIdleTime"],
                location["medianSessionLength"]
            ))

    # Add Per VM
    for vm in data[iStr]["perVM"]:
        cursor.execute("""INSERT INTO perVM(report, days, vm, sessions)
                            VALUES (%s, %s, %s, %s)""",(
                reportId,
                i,
                vm["vm"],
                vm["sessions"]
            ))

    # Add timeframe
    cursor.execute("INSERT INTO timeframe(report, days, tsFrom, tsTo) VALUES (%s, %s, FROM_UNIXTIME(%s), FROM_UNIXTIME(%s))",(
            reportId,
            i,
            data[iStr]["tsFrom"],
            data[iStr]["tsTo"]
        ))

    # Add dozmode
    cursor.execute("""INSERT INTO dozmod(report, days, vms_total, vms_new, vms_updated, vms_valid, lectures_total,
                        lectures_new, lectures_updated, lectures_valid, users_total, users_organizations)
                        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""",(
            reportId,
            i,
            data[iStr]["dozmod"]["vms"]["total"],
            data[iStr]["dozmod"]["vms"]["new"],
            data[iStr]["dozmod"]["vms"]["updated"],
            data[iStr]["dozmod"]["vms"]["valid"],
            data[iStr]["dozmod"]["lectures"]["total"],
            data[iStr]["dozmod"]["lectures"]["new"],
            data[iStr]["dozmod"]["lectures"]["updated"],
            data[iStr]["dozmod"]["lectures"]["valid"],
            data[iStr]["dozmod"]["users"]["total"],
            data[iStr]["dozmod"]["users"]["organizations"]
        ))

    # Add machines
    for item in data[iStr]["machines"]["location"]:
        if item["location"]:
            cursor.execute("INSERT INTO machine(report, days, property, value, count) VALUES (%s, %s, %s, %s, %s)",(
                    reportId,
                    i,
                    "location",
                    item["location"],
                    item["count"]
                ))
    for item in data[iStr]["machines"]["ram"]:
        cursor.execute("INSERT INTO machine(report, days, property, value, count) VALUES (%s, %s, %s, %s, %s)",(
                reportId,
                i,
                "ram",
                item["gbram"],
                item["total"]
            ))
    for item in data[iStr]["machines"]["cpumodel"]:
        cursor.execute("INSERT INTO machine(report, days, property, value, count) VALUES (%s, %s, %s, %s, %s)",(
                reportId,
                i,
                "cpumodel",
                item["cpumodel"],
                item["total"]
            ))
    for item in data[iStr]["machines"]["systemmodel"]:
        cursor.execute("INSERT INTO machine(report, days, property, value, count) VALUES (%s, %s, %s, %s, %s)",(
                reportId,
                i,
                "systemmodel",
                item["systemmodel"],
                item["total"]
            ))
    for item in data[iStr]["machines"]["realcores"]:
        cursor.execute("INSERT INTO machine(report, days, property, value, count) VALUES (%s, %s, %s, %s, %s)",(
                reportId,
                i,
                "realcores",
                item["realcores"],
                item["total"]
            ))
    for item in data[iStr]["machines"]["kvmstate"]:
        cursor.execute("INSERT INTO machine(report, days, property, value, count) VALUES (%s, %s, %s, %s, %s)",(
                reportId,
                i,
                "kvmstate",
                item["kvmstate"],
                item["total"]
            ))

db.commit()
db.close()

print("Import complete!")

exit(0)