aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2021-03-03 21:32:52 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2021-03-03 21:32:52 +0300
commitff1de38887bc67dc9c43ee870bf94c4362814853 (patch)
tree0ae1648f8080244a3ba10aa406695e59f19d110c
parentRevert "get.py: don't import cgi" (diff)
downloadlinux-status-ff1de38887bc67dc9c43ee870bf94c4362814853.tar.gz
linux-status-ff1de38887bc67dc9c43ee870bf94c4362814853.zip
get.py: refactoring
-rwxr-xr-xcgi-bin/get.py56
1 files changed, 34 insertions, 22 deletions
diff --git a/cgi-bin/get.py b/cgi-bin/get.py
index 500f081..3831812 100755
--- a/cgi-bin/get.py
+++ b/cgi-bin/get.py
@@ -9,6 +9,7 @@ import abc
import cgi
from collections import namedtuple
from concurrent.futures import ThreadPoolExecutor
+from enum import Enum
import json
import os
import pwd
@@ -33,17 +34,19 @@ def hostname():
return socket.gethostname()
-def headers():
- print("Content-Type: text/html; charset=utf-8")
- print()
+class Response:
+ def __init__(self, data):
+ self.data = data
+ def print(self):
+ print("Content-Type: text/html; charset=utf-8")
+ print()
+ if self.data is not None:
+ print(self.dump_json(self.data))
-def setup():
- headers()
-
-
-def format_response(response):
- return json.dumps(response, ensure_ascii=False)
+ @staticmethod
+ def dump_json(data):
+ return json.dumps(data, ensure_ascii=False)
def run_do(*args, **kwargs):
@@ -120,7 +123,7 @@ class Loginctl(Systemd):
class Task(abc.ABC):
def complete(self):
self.run()
- return self.result()
+ return Response(self.result())
@abc.abstractmethod
def run(self):
@@ -307,23 +310,32 @@ def systemd_users():
return show_users(list_users())
-def do():
+class Request(Enum):
+ STATUS = 'status'
+ TIMERS = 'timers'
+ TOP = 'top'
+
+ def __str__(self):
+ return self.value
+
+ def process(self):
+ if self is Request.STATUS:
+ return StatusTask().complete()
+ if self is Request.TIMERS:
+ return TimersTask().complete()
+ if self is Request.TOP:
+ return TopTask().complete()
+ raise NotImplementedError(f'unknown request: {self}')
+
+
+def process_cgi_request():
params = cgi.FieldStorage()
what = params['what'].value
- if what == 'status':
- response = StatusTask().complete()
- elif what == 'timers':
- response = TimersTask().complete()
- elif what == 'top':
- response = TopTask().complete()
- else:
- raise RuntimeError(f'invalid parameter "what": {what}')
- print(format_response(response))
+ Request(what).process().print()
def main():
- setup()
- do()
+ process_cgi_request()
if __name__ == '__main__':