Skip to content
This repository has been archived by the owner on Jun 9, 2020. It is now read-only.

Commit

Permalink
changed zathura file structure and added warning level
Browse files Browse the repository at this point in the history
  • Loading branch information
shepherd-06 committed Jan 30, 2019
1 parent e6d8f63 commit 2e890a1
Show file tree
Hide file tree
Showing 4 changed files with 234 additions and 215 deletions.
220 changes: 220 additions & 0 deletions ZathuraProject/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
import os
import sys
import time
from datetime import datetime
from uuid import uuid4
from datetime import datetime
from ZathuraProject.utility import Utility
from ZathuraProject.zathura import Zathura

CURRENT_VERSION = 'v0.0.2-dev1'
known_commands = ('v', 'insert', 'developer', 'debug_origin', 'error_user', 'all_debug', 'error_name', 'date', 'all_error', 'origin', 'mark_resolve', 'delete_debug', 'help',)

def create_app():
if len(sys.argv) > 1:
for args in sys.argv[1:]:
if args in known_commands:
print("Current argument: {}".format(args))
sql_utils = Zathura()
if args == 'v':
# TODO: is not gonna work for pip project.
print(CURRENT_VERSION)
elif args == 'insert':
print('[[[[[ For developers only. Skipping now ]]]]]'.upper())
command_man()
# import time
# for i in range(0, 10):
# rows = sql_utils.insert_error_log(user="test123", error_name="No error - {}".format(i), error_description="no description", point_of_origin=create_app.__name__, warning=2)
# print("error inserted test: {}".format(rows))
# time.sleep(1)
# debug_rows = sql_utils.insert_debug_log(developer="test123", message_data="eiuhsodfdf bkisdjsdf jsbjlsdfd - {}".format(i), point_of_origin=create_app.__name__)
# print("debug rows added {}".format(debug_rows))
# time.sleep(1)
elif args == "all_error":
filter_resolved = input("Press 1 to see all errors, including resolved, any key for others: ")
desc = ask_filter_and_order(ask_limit=False) # filters data in descending order based on logged_at time.
if filter_resolved == '1':
print_stuff_nice_and_good(sql_utils.get_all_error_log(show_all = True, desc = desc), "All Error logs")
else:
print_stuff_nice_and_good(sql_utils.get_all_error_log(desc = desc), "All Error logs")
elif args == "all_debug":
print_stuff_nice_and_good(sql_utils.get_all_debug_log(), "All Debug messages")
elif args == "error_name":
error_name = input("Enter the error_name: ")
generated_after, generated_before = ask_date()
desc, limit = ask_filter_and_order()
result = sql_utils.get_error_by_error_name(error_name, generated_after, generated_before, limit, desc)
print_stuff_nice_and_good(result, "Errors based on error name", generated_after, generated_before, limit, desc, error_name)
elif args == "user":
user = input("Enter a username: ")
generated_after, generated_before = ask_date()
desc, limit = ask_filter_and_order()
logs = sql_utils.get_error_by_user(user, limit, desc, generated_after, generated_before)
print_stuff_nice_and_good(logs, "Errors based on user", generated_after, generated_before, limit, desc, user)
elif args == 'origin':
origin = input("Enter point of origin: ")
generated_after, generated_before = ask_date()
desc, limit = ask_filter_and_order()
logs = sql_utils.get_error_by_origin(origin, generated_after, generated_before, limit, desc)
print_stuff_nice_and_good(logs, "Errors based on origin function/class", generated_after, generated_before, limit, desc, origin)
elif args == "date":
generated_after, generated_before = ask_date()
desc, limit = ask_filter_and_order()
result = sql_utils.get_error_by_date_limit(generated_after, generated_before, limit, desc)
print_stuff_nice_and_good(result, "Errors between a date frame", generated_after, generated_before, limit, desc)
elif args == 'debug_origin':
origin = input("Enter <DEBUG> point of origin: ")
generated_after, generated_before = ask_date()
verbose = sql_utils.get_debug_by_origin(origin, generated_after, generated_before)
print_stuff_nice_and_good(verbose, "Debug messages based on origin function/class", generated_after, generated_before, search_criteria=origin)
elif args == 'developer':
dev = input("Enter the developers name: ")
generated_after, generated_before = ask_date()
verbose = sql_utils.get_debug_by_developers(dev, generated_after, generated_before)
print_stuff_nice_and_good(verbose, "Debug messages based on developers name", generated_after, generated_before, search_criteria=dev)
elif args == 'mark_resolve':
error_name = input("Please provide error name: ")
origin = input("Please provide point of origin: ")
result = sql_utils.mark_resolve(error_name, origin)
print("Number of modified rows {}".format(result))
elif args == 'delete_debug':
sql_utils.delete_old_debug()
elif args == 'help':
command_man()
else:
print("unknown command - {}".format(args))
command_man()
break
else:
print(CURRENT_VERSION)

def ask_filter_and_order(ask_limit = True):
desc = input("Do you want to filter the result in descending order? Press 1 to confirm, Press any key to continue: ")
if desc == '1':
desc = True
else:
desc = False

if ask_limit:
while True:
limit = input("Do you want to limit the result? Print out the number. Number must be non-zero. Press Enter to skip: ")
try:
if len(limit) == 0:
return (desc, 0)
limit = int(limit)
if limit < 1:
print("Limit must be greater than or equal to 1")
else:
return (desc, limit)
except:
pass
else:
return desc


def ask_date():
generated_after = input("Show logs after this date (inclusive) (limit_1): (dd/mm/yyyy format): ")
if generated_after is None or len(generated_after) == 0:
print("No date filter then")
return (None, None)
else:
day, month, year = map(int, generated_after.split('/'))
generated_after = datetime(year, month, day, 0, 0, 0)

generated_before = input("Show logs before this date (inclusive) (limit_2): (dd/mm/yyyy format): ")
if generated_before is None or len(generated_before) == 0:
print("Current date will be using")
generated_before = None
else:
day, month, year = map(int, generated_before.split('/'))
generated_before = datetime(year, month, day, 0, 0, 0)

return (generated_after, generated_before)


def print_stuff_nice_and_good(payload:dict, message: str = None, date_filter_after: datetime = None, date_filter_before: datetime = None, limit: int = 0, desc: bool = False, search_criteria: str = None):
"""
print stuff in cute and functional way for now.
payload: dict the payload you just received from the sqlite_utility file
message: str any extra message you want to add?
"""
os.system('clear')
if payload is None:
return
total = payload['total'] if 'total'in payload else None
if total is None:
return
logs = payload['log'] if 'log' in payload else None
if logs is None:
return

print('--------------------------------------------------------')
print('--------------------------------------------------------')
if message is not None:
print(message)
if search_criteria is not None:
print("Search Criteria: {}".format(search_criteria))
if date_filter_after is not None:
_ = "Generated from: {}".format(date_filter_after.strftime(Utility.get_print_timeformat()))
if date_filter_before is not None:
_ += " to {}".format(date_filter_before.strftime(Utility.get_print_timeformat()))
print(_)

if limit != 0:
print("Total result is limited into {}".format(limit))

if desc:
print("Result is in descending order")
else:
print("Result is in ascending order")
print('--------------------------------------------------------')
print("Logs found = {}".format(total))
print('--------------------------------------------------------\n')

for log in logs:
if 'error_name' in log:
print("User: [[ {} ]] | Error: [[ {} ]] | Warning Level: [[ {} ]] | logged at: {} | Originated at [[ {} ]]".format(log['user'], log['error_name'], log['warning_level'] ,log['logged_at'], log['point_of_origin']))
print("Error Description: {}".format(log['error_description']))
if log['is_resolved'] == "Resolved":
print("Status: Resolved. Resolved at {}".format(log['resolved_at']))
else:
print("Status: Not Resolved yet")
print('--------------------------------------------------------\n')
else:
print("Developer: [[ {} ]] | logged at: {} | Location: [[ {} ]]".format(log['user'], log['logged_at'], log['point_of_origin']))
print("Message: {}".format( log['message-data']))
print('--------------------------------------------------------\n')


def command_man():
"""
This is command manual. This will print out the helper function of this command.
"""
helper = {
'v': 'Show the current version of this package',
'insert': 'This is for testing purpose only. I use it insert dummy data on the sqlite database',
'developer': 'Search based on developers name. You can filter out the result based on date and descending order',
'debug_origin': 'Shows debug messages based on point of origin. Point of origin is the class/function from where you are adding a message in sqlite.',
'all_debug': 'Shows all debug messages',
'delete_debug':'Deletes the last seven days of debug mesasges from the database. It is useful if you dont want to clutter the database with unnecessary debug info.',
'all_error': 'Shows all error messages',
'error_name': 'Shows error based on a error name.',
'date': 'Shows error occurred in between a specific date.',
'error_user': 'Shows error generated under the given username',
'origin': 'Shows error generated on the given point of origin',
'mark_resolve': 'Given an error name and point of origin all errors logged on database, is marked resolved.',
'help': 'Shows all the commands necessary to run this package from terminal',
}
print('usage: Zathura COMMAND [args] ...')
print('For example: { Zathura v } will show the current version of this pacakge.')
print('-----------------------------------------------------')
print('-----------------------------------------------------')
print("All commands: ")
for commands in known_commands:
print('[[ {} ]] : {}'.format(commands, helper[commands]))
print('-----------------------------------------------------')
print('-----------------------------------------------------')


if __name__ == '__main__':
create_app()
1 change: 1 addition & 0 deletions ZathuraProject/sqlite_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class ErrorLog(Model):
logged_at = IntegerField(default=Utility.current_time_in_milli())
is_resolved = BooleanField(default=False)
resolved_at = IntegerField(null=True)
warning_level = IntegerField(default=0)

class Meta:
database = db
Expand Down
Loading

0 comments on commit 2e890a1

Please sign in to comment.