Files
dev/script/statistics.py
2019-04-02 13:48:58 +02:00

133 lines
5.2 KiB
Python

import java.sql.DriverManager as DriverManager
import java.sql.ResultSet as ResultSet
import java.util.Properties as Properties
stmt = None
def get_stats_connection():
global stmt
Class.forName("org.relique.jdbc.csv.CsvDriver");
db = os.path.abspath(get_context().setup.expandPath("{home}/statistics"))
props = Properties()
props.put("fileExtension", ".csv")
props.put("separator", ";")
props.put("timestampFormat", "dd/MM/yy HH:mm:ss.SSS")
#timestampFormat, timeFormat, dateFormat
props.put("indexedFiles", "true");
props.put("fileTailPattern", "(\\d+)_(\\d+)"); #props.put("fileTailPattern", "-(\\d+)_(\\d+)");
props.put("fileTailParts", "Year,Month");
#Command,Args,Source,Start,End,Background,Result,Return
props.put("columnTypes", "String,String,String,Timestamp,Timestamp,Boolean,String,String");
conn = DriverManager.getConnection("jdbc:relique:csv:" + db, props);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
#results = stmt.executeQuery("SELECT Command,Result FROM 2019_03");
#results = stmt.executeQuery("SELECT Command,Result,Year,Month FROM Test");
return conn
def _get_count(sql):
ret = 0
results = stmt.executeQuery("SELECT COUNT(*) AS count FROM . WHERE " + sql)
if results.first():
ret = results.getInt("count")
return ret
def _add_sql_time(sql, start, end):
if start:
if len(start)==8:
start = start + " 00:00:00.000"
sql = sql + " AND Start>='" + start + "'"
if end:
if len(end)==8:
end = end + " 00:00:00.000"
sql = sql + " AND (\"End\"<'" + end + "')"
return sql
def get_count(command= "%%", start = None, end = None, result= "%%"):
sql = "Command LIKE '"+ command +"' AND Result LIKE '"+ result +"'"
sql = _add_sql_time(sql, start, end)
return _get_count(sql)
def get_return_count(command= "%%", start = None, end = None, ret= "%%"):
sql = "Command LIKE '"+ command +"' AND Return = '"+ ret +"'"
sql = _add_sql_time(sql, start, end)
return _get_count(sql)
def get_cmd_stats(command = "%", start = None, end = None):
s = get_count(command, start, end, "success")
a = get_count(command, start, end, "abort")
e = get_count(command, start, end, "error")
return (s,a,e)
def get_errors(command = "%", start = None, end = None):
sql = "SELECT Return, Count(Return) as count FROM . WHERE Command LIKE '"+ command +"' AND Result='error'"
sql = _add_sql_time(sql, start, end)
sql = sql + " GROUP BY Return ORDER BY count DESC"
results = stmt.executeQuery(sql)
ret = []
while results.next():
ret.append((results.getInt("count"), results.getString("Return")))
return ret
def get_commands(commands =None, start = None, end = None):
sql = "SELECT * FROM . WHERE Command != ''"
sql = _add_sql_time(sql, start, end)
if (commands is not None) and (len(commands)>0):
sql = sql + " AND ("
first = True
for c in commands:
sql = sql + ("" if first else " OR")
sql = sql + "(Command LIKE '" + c + "')"
first = False
sql = sql + " )"
sql = sql + " GROUP BY Command"
results = stmt.executeQuery(sql)
ret = []
while results.next():
cmd = results.getString("Command")
if cmd and not " " in cmd:
ret.append(cmd)
return ret
def print_cmd_stats(command = "%", start = None, end = None):
print "-----------------------------------------------------------"
print "Statistics from ", start , " to ", end
(s,a,e) = get_cmd_stats(command, start, end)
t=s+a+e #get_count(command, start, end, "%")
print "Command: " , command , " Records: ", t
if t>0:
print "%-10s %7.2f%% - %d" % ("Success", (float(s)/t) * 100, s)
print "%-10s %7.2f%% - %d" % ("Abort", (float(a)/t) * 100, a)
print "%-10s %7.2f%% - %d" % ("Error", (float(e)/t) * 100, e)
print "\nErrors:"
print "%5s %s" % ("Count", "Error")
errors = get_errors(command, start, end)
for error in errors:
print "%5d %s" % (error[0], error[1])
print "-----------------------------------------------------------"
def print_stats(commands = None, start = None, end = None):
print "-----------------------------------------------------------"
print "Statistics from ", start , " to ", end
print "%-20s %-5s %8s %8s %8s" % ("Command", "Total", "Success", "Abort", "Error")
cmds = get_commands(commands)
for cmd in cmds:
(s,a,e) = get_cmd_stats(cmd, start, end)
t=s+a+e
print "%-20s %-5d %7.2f%% %7.2f%% %7.2f%%" % (cmd, t, (float(s)/t) * 100, (float(a)/t) * 100, (float(e)/t) * 100)
print "-----------------------------------------------------------"
if __name__=='__main__':
conn = get_stats_connection()
start= "06/02/19" #"06/02/19 13:27:56.124"
end= "16/03/19" #"29/04/19 13:27:56.124"
cmds = ["%test1.py","%test2%"]
print_stats(cmds, start, end)
for cmd in cmds:
print_cmd_stats (cmd, start, end)
conn.close()