Skip to content

Commit

Permalink
web - added http-error logging
Browse files Browse the repository at this point in the history
  • Loading branch information
superstes committed Apr 3, 2021
1 parent b800e55 commit 890a082
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 28 deletions.
10 changes: 7 additions & 3 deletions code/web/base/ga/subviews/system/logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

from ...user import authorized_to_read
from ...utils.helper import check_develop, get_controller_setting, str_to_list, develop_subprocess
from ..handlers import handler404

# need to add www-data to systemd-journal group (usermod -a -G systemd-journal www-data)

Expand Down Expand Up @@ -34,6 +33,7 @@ def LogView(request):

if develop:
device_log_list = ['02_device_test1.log', '02_device_earth_humidity.log', '']

else:
device_log_list = os_listdir("%s/device/%s/" % (path_log, date_year))

Expand All @@ -46,12 +46,14 @@ def LogView(request):
try:
device = device_log.split('_', 2)[2].rsplit('.', 1)[0]
log_ga_options["Device '%s'" % device] = "%s/device/%s/%s" % (path_log, date_year, device_log)

except IndexError:
log_ga_options["Log '%s'" % device_log] = "%s/device/%s/%s" % (path_log, date_year, device_log)

if 'log_entry_count' in request.GET and \
int(request.GET['log_entry_count']) in SHELL_MAX_LOG_LINES_RANGE:
log_entry_count = int(request.GET['log_entry_count'])

else:
log_entry_count = SHELL_MAX_LOG_LINES

Expand All @@ -76,6 +78,7 @@ def LogView(request):
if log_type == 'Service':
if develop:
log_data = ['test data', 'data service']

else:
log_data = str_to_list(
develop_subprocess(
Expand All @@ -87,6 +90,7 @@ def LogView(request):
elif log_type == 'Service journal':
if develop:
log_data = ['test data', 'data journal']

else:
log_data = str_to_list(
develop_subprocess(
Expand All @@ -106,6 +110,7 @@ def LogView(request):
# option to view older (truncated) logs?
if develop:
log_data = [f"log from file '{path_log}' -> test data", 'data ga']

else:
log_data = str_to_list(
develop_subprocess(
Expand All @@ -115,6 +120,7 @@ def LogView(request):
),
reverse=True
)

else:
log_subtype_options = log_service_options

Expand All @@ -125,8 +131,6 @@ def LogView(request):
if type(log_data) == list and len(log_data) == 0:
log_data = None

handler404(request=request, msg='test')

if log_subtype_options is not None:
log_subtype_option_list = sorted([key for key in log_subtype_options.keys()])

Expand Down
4 changes: 2 additions & 2 deletions code/web/base/ga/subviews/system/scripts.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from ...user import authorized_to_read, authorized_to_write
from ...utils.helper import get_script_dir, str_to_list
from ...forms import SystemScriptForm
from ..handlers import handler404
from ..handlers import Pseudo404


TITLE = 'System scripts'
Expand Down Expand Up @@ -83,7 +83,7 @@ def ScriptChangeView(request):
script_type = request.GET['script_type']
script_dir = get_script_dir(request, typ=script_type)
else:
return handler404(request, msg='A script type must be defined.')
raise Pseudo404(ga={'request': request, 'msg': 'A script type must be defined.'})

return render(request, 'system/script/change.html', context={
'request': request, 'script_type': script_type, 'form': form, 'script_dir': script_dir, 'title': TITLE,
Expand Down
20 changes: 9 additions & 11 deletions code/web/base/ga/subviews/system/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,9 @@
from datetime import datetime, timedelta
from time import sleep

from core.utils.debug import Log

from ...user import authorized_to_read, authorized_to_write
from ...utils.helper import get_time_difference, develop_subprocess, get_controller_obj
from ..handlers import handler404

logger = Log(typ='web', web_ctrl_obj=get_controller_obj())
from ...utils.helper import get_time_difference, develop_subprocess, develop_log
from ..handlers import Pseudo404

# need to allow www-data to start/stop/restart/reload services

Expand Down Expand Up @@ -46,11 +42,12 @@ def ServiceView(request):
if 'service_name' in request.GET or 'service_name' in request.POST:
if 'service_name' in request.GET:
service_name = request.GET['service_name']

else:
service_name = request.POST['service_name']

if service_name not in service_name_options:
return handler404(request, msg="Service '%s' not manageable" % service_name)
raise Pseudo404(ga={'request': request, 'msg': f"Service \"{service_name}\" not manageable"})

service_value = service_name_options[service_name]

Expand All @@ -59,6 +56,7 @@ def ServiceView(request):

if service_status == 'active':
status_command = SHELL_SERVICE_ACTIVE_TIMESTAMP

else:
status_command = SHELL_SERVICE_INACTIVE_TIMESTAMP

Expand Down Expand Up @@ -93,17 +91,17 @@ def service_action(request, service: str):
log_tmpl = f"{meta['PATH_INFO']} - action \"%s service {service}\" was executed by user {request.user} from remote ip {meta['REMOTE_ADDR']}"

if 'service_start' in request.POST:
logger.write(log_tmpl % 'start')
develop_log(request=request, output=log_tmpl % 'start')
develop_subprocess(request, command="%s start %s" % (systemctl, service), develop='ok')

elif 'service_reload' in request.POST:
logger.write(log_tmpl % 'reload')
develop_log(request=request, output=log_tmpl % 'reload')
develop_subprocess(request, command="%s reload %s" % (systemctl, service), develop='ok')

elif 'service_restart' in request.POST:
logger.write(log_tmpl % 'restart')
develop_log(request=request, output=log_tmpl % 'restart')
develop_subprocess(request, command="%s restart %s" % (systemctl, service), develop='ok')

elif 'service_stop' in request.POST:
logger.write(log_tmpl % 'stop')
develop_log(request=request, output=log_tmpl % 'stop')
develop_subprocess(request, command="%s stop %s" % (systemctl, service), develop='ok')
5 changes: 2 additions & 3 deletions code/web/base/ga/templatetags/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from ..utils.helper import get_controller_setting, get_client_ip
from ..config.shared import DATETIME_TS_FORMAT
from ..config.nav import nav_dict
from ..models import MemberConditionLinkModel, ObjectConditionModel, GroupConditionModel

register = template.Library()

Expand Down Expand Up @@ -171,7 +170,7 @@ def get_return_path(request, typ=None) -> str:

else:
if typ is None:
path = request.META.get('HTTP_REFERER')
path = request.META['HTTP_REFERER']

else:
path = f"/config/list/{ typ }/"
Expand All @@ -184,7 +183,7 @@ def get_return_path(request, typ=None) -> str:

@register.filter
def handler500_update(request):
if request.META.get('HTTP_REFERER').find('/update') != -1:
if request.META['HTTP_REFERER'].find('/update') != -1:
return True

return False
Expand Down
13 changes: 10 additions & 3 deletions code/web/base/ga/utils/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
from django.utils import timezone as django_timezone

from core.utils.process import subprocess
from core.utils.debug import Log

from ..models import ObjectControllerModel
from ..models import ObjectInputModel, ObjectOutputModel, ObjectConnectionModel
from ..models import MemberInputModel, MemberOutputModel, MemberConnectionModel
from ..subviews.handlers import handler404
from ..subviews.handlers import Pseudo404
from ..config.shared import DATETIME_TS_FORMAT


Expand Down Expand Up @@ -40,7 +41,7 @@ def get_controller_setting(request, setting: str):
return getattr(get_controller_obj(), setting)

except IndexError:
raise handler404(request, msg="Can't get controller setting if no controller exists. You must create a controller first.")
raise Pseudo404(ga={'request': request, 'msg': "Can't get controller setting if no controller exists. You must create a controller first."})


def get_script_dir(request, typ) -> str:
Expand Down Expand Up @@ -70,7 +71,13 @@ def develop_subprocess(request, command: str, develop: (str, list) = None) -> st
if check_develop(request):
return develop

return subprocess(command)
return subprocess(command, web_ctrl_obj=get_controller_obj())


def develop_log(request, output: str, level: int = 1) -> None:
if not check_develop(request):
logger = Log(typ='web', web_ctrl_obj=get_controller_obj())
logger.write(output=output, level=level)


def add_timezone(request, datetime_obj):
Expand Down
22 changes: 16 additions & 6 deletions code/web/base/ga/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from .config.site import type_dict
from .subviews.config.main import ConfigView
from .utils.main import logout_check
from .utils.helper import develop_log
from .user import authorized_to_access
from .subviews.handlers import handler403, handler404, handler403_api, handler404_api, handler500
from .subviews.handlers import Pseudo403, Pseudo404, Pseudo500
Expand All @@ -29,7 +30,7 @@ def start(self, request, a: str = None, b: str = None, c: str = None, d: str = N
return self.denied(request=request)

elif a == 'api_denied':
return self.api_denied()
return self.api_denied(request=request)

elif a == 'api':
return self.api(request=request, typ=b)
Expand Down Expand Up @@ -62,16 +63,20 @@ def start(self, request, a: str = None, b: str = None, c: str = None, d: str = N
else:
return self.home(request=request)

except (TypeError, KeyError) as error:
except (TypeError, KeyError, IndexError) as error:
develop_log(request=request, output=f"{request.build_absolute_uri()} - Got error 500 - {error}")
return handler500(request, msg=error)

except Pseudo404 as exc:
develop_log(request=request, output=f"{request.build_absolute_uri()} - Got error 404 - {exc} - {exc.ga['msg']}")
return handler404(request=exc.ga['request'], msg=exc.ga['msg'])

except Pseudo403 as exc:
develop_log(request=request, output=f"{request.build_absolute_uri()} - Got error 403 - {exc} - {exc.ga['msg']}")
return handler403(request=exc.ga['request'], msg=exc.ga['msg'])

except Pseudo500 as exc:
develop_log(request=request, output=f"{request.build_absolute_uri()} - Got error 500 - {exc} - {exc.ga['msg']}")
return handler500(request=exc.ga['request'], msg=exc.ga['msg'])

@staticmethod
Expand Down Expand Up @@ -108,9 +113,9 @@ def system(request, typ: str, sub_type: str = None):
return logout_check(request=request, default=ScriptView(request=request))

elif typ == 'export':
return export_view(request=request)
return logout_check(export_view(request=request))

return logout_check(request=request, default=handler404(request=request, msg='Not yet implemented!'))
raise Pseudo404(ga={'request': request, 'msg': 'Not implemented!'})

@staticmethod
@login_required
Expand Down Expand Up @@ -146,10 +151,12 @@ def data(request, typ: str, sub_type: str = None, third_type: str = None):

return logout_check(request=request, default=DashboardView(request=request).go_main())

return logout_check(request=request, default=handler404(request=request, msg='Not yet implemented!'))
raise Pseudo404(ga={'request': request, 'msg': 'Not implemented!'})

@staticmethod
def denied(request):
error_source_url = request.build_absolute_uri(request.META['QUERY_STRING'].split('=', 1)[1])
develop_log(request=request, output=f"{error_source_url} - Got error 403 - Access denied for user \"{request.user}\"")
return logout_check(request=request, default=handler403(request))

@staticmethod
Expand All @@ -166,8 +173,11 @@ def api(request, typ: str):
elif typ == 'chart':
return ApiChart(request=request)

develop_log(request=request, output=f"{request.build_absolute_uri()} - Got error 404 - api not implemented")
return handler404_api()

@staticmethod
def api_denied():
def api_denied(request):
error_source_url = request.build_absolute_uri(request.META['QUERY_STRING'].split('=', 1)[1])
develop_log(request=request, output=f"{error_source_url} - Got error 403 - api access denied")
return handler403_api()

0 comments on commit 890a082

Please sign in to comment.