nginx-lens 0.1.8__tar.gz → 0.2.0__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.
- {nginx_lens-0.1.8/nginx_lens.egg-info → nginx_lens-0.2.0}/PKG-INFO +1 -1
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/README.md +27 -11
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/route.py +1 -1
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/graph.py +3 -4
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/route.py +2 -1
- {nginx_lens-0.1.8 → nginx_lens-0.2.0/nginx_lens.egg-info}/PKG-INFO +1 -1
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/setup.py +1 -1
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/LICENSE +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/__init__.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/base.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/conflicts.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/dead_locations.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/diff.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/duplicates.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/empty_blocks.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/include.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/rewrite.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/unused.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/analyzer/warnings.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/__init__.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/analyze.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/cli.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/diff.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/health.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/include.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/logs.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/syntax.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/commands/tree.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/exporter/__init__.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/exporter/graph.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/exporter/html.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/exporter/markdown.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/nginx_lens.egg-info/SOURCES.txt +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/nginx_lens.egg-info/dependency_links.txt +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/nginx_lens.egg-info/entry_points.txt +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/nginx_lens.egg-info/requires.txt +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/nginx_lens.egg-info/top_level.txt +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/parser/__init__.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/parser/nginx_parser.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/pyproject.toml +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/setup.cfg +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/tests/test_conflicts.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/tests/test_duplicates.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/tests/test_empty_blocks.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/tests/test_health.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/tests/test_parser.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/upstream_checker/__init__.py +0 -0
- {nginx_lens-0.1.8 → nginx_lens-0.2.0}/upstream_checker/checker.py +0 -0
|
@@ -14,35 +14,35 @@
|
|
|
14
14
|
|
|
15
15
|
### Справочник утилиты
|
|
16
16
|
|
|
17
|
-

|
|
18
18
|
|
|
19
19
|
### Справочник для команд
|
|
20
20
|
|
|
21
|
-

|
|
22
22
|
|
|
23
23
|
### Доступность upstream-серверов
|
|
24
24
|
|
|
25
|
-

|
|
26
26
|
|
|
27
27
|
### Древовидная визуализация структуры конфига
|
|
28
28
|
|
|
29
|
-

|
|
30
30
|
|
|
31
31
|
### Древовидная визуализация include'ов
|
|
32
32
|
|
|
33
|
-

|
|
34
34
|
|
|
35
35
|
### Удобный анализатор логов
|
|
36
36
|
|
|
37
|
-

|
|
38
38
|
|
|
39
39
|
### Аудит конфигурации
|
|
40
40
|
|
|
41
|
-

|
|
42
42
|
|
|
43
43
|
### Визуализация маршрутов
|
|
44
44
|
|
|
45
|
-

|
|
46
46
|
|
|
47
47
|
### Поиск маршрута для URL
|
|
48
48
|
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
|
|
51
51
|
### Сравнение конфигов
|
|
52
52
|
|
|
53
|
-

|
|
54
54
|
|
|
55
55
|
### Удобная проверка синтаксиса конфига
|
|
56
56
|
|
|
57
|
-

|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
## Установка и системные требования
|
|
@@ -62,7 +62,23 @@
|
|
|
62
62
|
- **Python 3.8+**
|
|
63
63
|
- Linux/macOS (работает и под Windows WSL)
|
|
64
64
|
|
|
65
|
-
### Установка
|
|
65
|
+
### Установка с помощью bash-скрипта (Рекомендуется)
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
wget https://raw.githubusercontent.com/shelovesuastra/nginx-lens/install-nginx-lens.sh
|
|
69
|
+
# или
|
|
70
|
+
curl https://raw.githubusercontent.com/shelovesuastra/nginx-lens/install-nginx-lens.sh
|
|
71
|
+
|
|
72
|
+
chmod +x install-nginx-lens.sh
|
|
73
|
+
|
|
74
|
+
./install-nginx-lens.sh
|
|
75
|
+
# или
|
|
76
|
+
sh ./install-nginx-lens.sh
|
|
77
|
+
# или
|
|
78
|
+
bash ./install-nginx-lens.sh
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Установка через PyPI
|
|
66
82
|
|
|
67
83
|
```bash
|
|
68
84
|
pipx install nginx-lens
|
|
@@ -33,7 +33,7 @@ def find_route(tree, url: str) -> Optional[Dict[str, Any]]:
|
|
|
33
33
|
if score > best_server_score:
|
|
34
34
|
best_server = d
|
|
35
35
|
best_server_score = score
|
|
36
|
-
if not best_server:
|
|
36
|
+
if not best_server or best_server_score < 2:
|
|
37
37
|
return None
|
|
38
38
|
# 2. Внутри server ищем лучший location (longest prefix match)
|
|
39
39
|
best_loc = None
|
|
@@ -29,9 +29,8 @@ def graph(
|
|
|
29
29
|
# Для каждого server/location строим маршрут
|
|
30
30
|
def walk(d, chain, upstreams):
|
|
31
31
|
if d.get('block') == 'server':
|
|
32
|
-
srv = d.get('arg','') or '[no arg]'
|
|
33
32
|
for sub in d.get('directives', []):
|
|
34
|
-
walk(sub, chain + [('server',
|
|
33
|
+
walk(sub, chain + [('server', None)], upstreams)
|
|
35
34
|
elif d.get('block') == 'location':
|
|
36
35
|
loc = d.get('arg','')
|
|
37
36
|
for sub in d.get('directives', []):
|
|
@@ -81,10 +80,10 @@ def graph(
|
|
|
81
80
|
server_val = route[0][1]
|
|
82
81
|
server_block = None
|
|
83
82
|
for d in tree.directives:
|
|
84
|
-
if d.get('block') == 'server'
|
|
83
|
+
if d.get('block') == 'server':
|
|
85
84
|
server_block = d
|
|
86
85
|
break
|
|
87
|
-
label = get_server_label(server_block) if server_block else
|
|
86
|
+
label = get_server_label(server_block) if server_block else 'default'
|
|
88
87
|
server_file = server_block.get('__file__') if server_block else None
|
|
89
88
|
t.append(f"[", style="white")
|
|
90
89
|
t.append(f"server: {label}", style="bold blue")
|
|
@@ -60,4 +60,5 @@ def route(
|
|
|
60
60
|
text += f"[bold]proxy_pass:[/bold] {proxy_pass}\n"
|
|
61
61
|
console.print(Panel(text, title="Route", style="green"))
|
|
62
62
|
return
|
|
63
|
-
|
|
63
|
+
search_dir = os.path.dirname(configs[0]) if configs else '/etc/nginx'
|
|
64
|
+
console.print(Panel(f"Маршрут для {url} не найден ни в одном .conf в {search_dir}", style="yellow"))
|
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="nginx-lens",
|
|
5
|
-
version="0.
|
|
5
|
+
version="0.2.0",
|
|
6
6
|
description="CLI-инструмент для анализа, визуализации и диагностики конфигураций Nginx",
|
|
7
7
|
author="Daniil Astrouski",
|
|
8
8
|
author_email="shelovesuastra@gmail.com",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|