omserv 0.0.0.dev102__py3-none-any.whl → 0.0.0.dev104__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
omserv/.manifests.json CHANGED
@@ -1 +1,14 @@
1
- []
1
+ [
2
+ {
3
+ "module": ".nginx.logs",
4
+ "attr": "_CLI_MODULE",
5
+ "file": "omserv/nginx/logs.py",
6
+ "line": 65,
7
+ "value": {
8
+ "$omdev.cli.types.CliModule": {
9
+ "cmd_name": "nginxlogs",
10
+ "mod_name": "omserv.nginx.logs"
11
+ }
12
+ }
13
+ }
14
+ ]
omserv/nginx/logs.py ADDED
@@ -0,0 +1,94 @@
1
+ """
2
+ '54.244.199.9',
3
+ '-',
4
+ '-',
5
+ '[20/Jul/2024:17:54:01 +0000]',
6
+ '"GET /profile/jenkinsFile HTTP/1.1"',
7
+ '404',
8
+ '555',
9
+ '"-"',
10
+ '"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"',
11
+
12
+ ==
13
+
14
+ remote_addr
15
+ -
16
+ remote_user
17
+ [time_local]
18
+ "request"
19
+ status
20
+ body_bytes_sent
21
+ "http_referer"
22
+ "http_user_agent"
23
+ """ # noqa
24
+ import itertools
25
+ import json
26
+ import re
27
+ import typing as ta
28
+
29
+
30
+ NGINX_LOG_PAT = re.compile(r'(\[[^\]]*\])|("[^"]*")|([^ ]+)')
31
+
32
+ NGINX_LOG_COLUMNS: ta.Sequence[str] = [
33
+ 'remote_addr',
34
+ '-',
35
+ 'remote_user',
36
+ 'time_local',
37
+ 'request',
38
+ 'status',
39
+ 'body_bytes_sent',
40
+ 'http_referer',
41
+ 'http_user_agent',
42
+ ]
43
+
44
+
45
+ def parse_nginx_log_line(
46
+ line: str,
47
+ *,
48
+ columns: ta.Sequence[str] = NGINX_LOG_COLUMNS,
49
+ pattern: re.Pattern = NGINX_LOG_PAT,
50
+ num_groups: int = 4,
51
+ ) -> dict[str, ta.Any]:
52
+ if isinstance(columns, str):
53
+ raise TypeError(columns)
54
+
55
+ vs = []
56
+ for t in itertools.batched(pattern.split(line.strip()), num_groups):
57
+ if len(t) < 2:
58
+ continue
59
+ [v] = filter(None, t[1:])
60
+ vs.append(v)
61
+
62
+ return dict(zip(columns, vs, strict=True))
63
+
64
+
65
+ # @omlish-manifest
66
+ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
67
+ 'cmd_name': 'nginxlogs',
68
+ 'mod_name': __name__,
69
+ }}
70
+
71
+
72
+ def _main() -> None:
73
+ import argparse
74
+ import contextlib
75
+ import sys
76
+
77
+ parser = argparse.ArgumentParser()
78
+ parser.add_argument('file', nargs='?')
79
+ args = parser.parse_args()
80
+
81
+ with contextlib.ExitStack() as es:
82
+ f: ta.TextIO
83
+ if args.file:
84
+ f = es.enter_context(open(args.file))
85
+ else:
86
+ f = sys.stdin
87
+
88
+ for line in f:
89
+ d = parse_nginx_log_line(line)
90
+ print(json.dumps(d))
91
+
92
+
93
+ if __name__ == '__main__':
94
+ _main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omserv
3
- Version: 0.0.0.dev102
3
+ Version: 0.0.0.dev104
4
4
  Summary: omserv
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish ==0.0.0.dev102
15
+ Requires-Dist: omlish ==0.0.0.dev104
16
16
  Provides-Extra: all
17
17
  Requires-Dist: h11 ~=0.14 ; extra == 'all'
18
18
  Requires-Dist: h2 ~=4.1 ; extra == 'all'
@@ -1,4 +1,4 @@
1
- omserv/.manifests.json,sha256=N1F-Xz3GaBn2H1p7uKzhkhKCQV8QVR0t76XD6wmFtXA,3
1
+ omserv/.manifests.json,sha256=qn9Vc6VXiVo9RzpJdLzQi_x2DPZIP3cq4S2bkqvJqjY,260
2
2
  omserv/__about__.py,sha256=JmwjAacCkF6Sw699ne21R3M2V8A-bqni47noz3L-yuo,765
3
3
  omserv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omserv/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -11,6 +11,7 @@ omserv/apps/templates.py,sha256=PBRZHIF9UbnFnq-4EC6RmPeRkeH8lCBbpJkSdseHs6A,2125
11
11
  omserv/nginx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  omserv/nginx/build.py,sha256=zt7e7Jt4R3Nfq-aosBgChdbK0O85oKIOBJmnupsk27o,3145
13
13
  omserv/nginx/configs.py,sha256=4oQDcKJKIatRG621qiZCYTayJI3-vv63TtRCiUxEVWI,2008
14
+ omserv/nginx/logs.py,sha256=cODPsG1j3EQiXbb9SR20NpB9MjGdWN0ArFZ-TA9xf-c,1840
14
15
  omserv/nginx/stubstatus.py,sha256=_VnXZdXxSA7jIelYSwJLf9mOnt_UOvpWghAPWtlWSLw,1857
15
16
  omserv/nginx/patches/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  omserv/nginx/patches/nginx-1.27.1_http_status.patch,sha256=bEDSczpBLcdjcBp_X1m73oxvt8KPeons7v_sUxqBSXM,4335
@@ -44,9 +45,9 @@ omserv/server/streams/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
44
45
  omserv/server/streams/httpstream.py,sha256=0DeiAPLGbEGNa0fHTs8lUpi_CFZs4M5_QB-TiS8mobQ,8015
45
46
  omserv/server/streams/utils.py,sha256=aMOrqWIg_Hht5W4kLg3y7oR5AEkVvMrZhyjzo6U5owE,1527
46
47
  omserv/server/streams/wsstream.py,sha256=3Vyzox7dCE1tDSXjb6xBubWo41ZF9d38Hrsrlj6h1J8,15482
47
- omserv-0.0.0.dev102.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
48
- omserv-0.0.0.dev102.dist-info/METADATA,sha256=zsfucWaMv8WwxiHGxMfoCBkaWsGYt6gBMxWCqubUclE,1005
49
- omserv-0.0.0.dev102.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
50
- omserv-0.0.0.dev102.dist-info/entry_points.txt,sha256=ivSrdA_ahEbI-eVMu-XZS-z4VrnQISvpecIkOqC9zFM,35
51
- omserv-0.0.0.dev102.dist-info/top_level.txt,sha256=HXehpnxeKscKNULzKNzZ27oNawBrsh1PaNAirbX-XNA,7
52
- omserv-0.0.0.dev102.dist-info/RECORD,,
48
+ omserv-0.0.0.dev104.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
49
+ omserv-0.0.0.dev104.dist-info/METADATA,sha256=RxBOsCIaI-i5_LWGndtVCF7Gl6K2n3LJVqWMQ9uBPuc,1005
50
+ omserv-0.0.0.dev104.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
51
+ omserv-0.0.0.dev104.dist-info/entry_points.txt,sha256=ivSrdA_ahEbI-eVMu-XZS-z4VrnQISvpecIkOqC9zFM,35
52
+ omserv-0.0.0.dev104.dist-info/top_level.txt,sha256=HXehpnxeKscKNULzKNzZ27oNawBrsh1PaNAirbX-XNA,7
53
+ omserv-0.0.0.dev104.dist-info/RECORD,,