omserv 0.0.0.dev102__tar.gz → 0.0.0.dev104__tar.gz

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.
Files changed (60) hide show
  1. {omserv-0.0.0.dev102/omserv.egg-info → omserv-0.0.0.dev104}/PKG-INFO +2 -2
  2. omserv-0.0.0.dev104/omserv/.manifests.json +14 -0
  3. omserv-0.0.0.dev104/omserv/nginx/logs.py +94 -0
  4. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104/omserv.egg-info}/PKG-INFO +2 -2
  5. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv.egg-info/SOURCES.txt +1 -0
  6. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv.egg-info/requires.txt +1 -1
  7. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/pyproject.toml +2 -2
  8. omserv-0.0.0.dev102/omserv/.manifests.json +0 -1
  9. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/LICENSE +0 -0
  10. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/MANIFEST.in +0 -0
  11. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/README.rst +0 -0
  12. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/__about__.py +0 -0
  13. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/__init__.py +0 -0
  14. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/apps/__init__.py +0 -0
  15. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/apps/base.py +0 -0
  16. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/apps/inject.py +0 -0
  17. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/apps/markers.py +0 -0
  18. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/apps/routes.py +0 -0
  19. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/apps/sessions.py +0 -0
  20. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/apps/templates.py +0 -0
  21. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/nginx/__init__.py +0 -0
  22. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/nginx/build.py +0 -0
  23. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/nginx/configs.py +0 -0
  24. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/nginx/patches/__init__.py +0 -0
  25. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/nginx/patches/nginx-1.27.1_http_status.patch +0 -0
  26. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/nginx/stubstatus.py +0 -0
  27. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/node/__init__.py +0 -0
  28. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/node/models.py +0 -0
  29. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/node/registry.py +0 -0
  30. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/node/sql.py +0 -0
  31. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/LICENSE +0 -0
  32. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/__init__.py +0 -0
  33. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/config.py +0 -0
  34. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/debug.py +0 -0
  35. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/events.py +0 -0
  36. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/headers.py +0 -0
  37. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/lifespans.py +0 -0
  38. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/multiprocess.py +0 -0
  39. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/protocols/__init__.py +0 -0
  40. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/protocols/h11.py +0 -0
  41. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/protocols/h2.py +0 -0
  42. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/protocols/protocols.py +0 -0
  43. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/protocols/types.py +0 -0
  44. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/resources/__init__.py +0 -0
  45. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/resources/favicon.ico +0 -0
  46. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/sockets.py +0 -0
  47. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/ssl.py +0 -0
  48. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/streams/__init__.py +0 -0
  49. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/streams/httpstream.py +0 -0
  50. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/streams/utils.py +0 -0
  51. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/streams/wsstream.py +0 -0
  52. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/taskspawner.py +0 -0
  53. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/tcpserver.py +0 -0
  54. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/types.py +0 -0
  55. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/workercontext.py +0 -0
  56. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv/server/workers.py +0 -0
  57. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv.egg-info/dependency_links.txt +0 -0
  58. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv.egg-info/entry_points.txt +0 -0
  59. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/omserv.egg-info/top_level.txt +0 -0
  60. {omserv-0.0.0.dev102 → omserv-0.0.0.dev104}/setup.cfg +0 -0
@@ -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"
@@ -0,0 +1,14 @@
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
+ ]
@@ -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"
@@ -21,6 +21,7 @@ omserv/apps/templates.py
21
21
  omserv/nginx/__init__.py
22
22
  omserv/nginx/build.py
23
23
  omserv/nginx/configs.py
24
+ omserv/nginx/logs.py
24
25
  omserv/nginx/stubstatus.py
25
26
  omserv/nginx/patches/__init__.py
26
27
  omserv/nginx/patches/nginx-1.27.1_http_status.patch
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev102
1
+ omlish==0.0.0.dev104
2
2
 
3
3
  [all]
4
4
  h11~=0.14
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev102'
15
+ version = '0.0.0.dev104'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omserv'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev102',
25
+ 'omlish == 0.0.0.dev104',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
@@ -1 +0,0 @@
1
- []
File without changes
File without changes
File without changes
File without changes