sysgraph 0.0.14__tar.gz → 0.0.16__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.
- {sysgraph-0.0.14/src/sysgraph.egg-info → sysgraph-0.0.16}/PKG-INFO +32 -1
- {sysgraph-0.0.14 → sysgraph-0.0.16}/README.md +31 -0
- sysgraph-0.0.16/src/sysgraph/__init__.py +1 -0
- sysgraph-0.0.16/src/sysgraph/dist/assets/index-D4kwmDWy.css +1 -0
- sysgraph-0.0.14/src/sysgraph/dist/assets/index-DbxwxpDd.js → sysgraph-0.0.16/src/sysgraph/dist/assets/index-D5t1fx8g.js +99 -99
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/dist/index.html +26 -10
- {sysgraph-0.0.14 → sysgraph-0.0.16/src/sysgraph.egg-info}/PKG-INFO +32 -1
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph.egg-info/SOURCES.txt +2 -2
- sysgraph-0.0.14/src/sysgraph/__init__.py +0 -1
- sysgraph-0.0.14/src/sysgraph/dist/assets/index-Ba1ztXgb.css +0 -1
- {sysgraph-0.0.14 → sysgraph-0.0.16}/LICENSE +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/MANIFEST.in +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/pyproject.toml +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/setup.cfg +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/setup.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/__main__.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/app.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/constants.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/discovery.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/dist/assets/icon-TKtfQOgj.png +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/graph.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/main.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph/model.py +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph.egg-info/dependency_links.txt +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph.egg-info/entry_points.txt +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph.egg-info/not-zip-safe +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph.egg-info/requires.txt +0 -0
- {sysgraph-0.0.14 → sysgraph-0.0.16}/src/sysgraph.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sysgraph
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.16
|
|
4
4
|
Summary: Visualizer for processes and their interconnections
|
|
5
5
|
Home-page: https://github.com/gubenkoved/sysgraph
|
|
6
6
|
Author: Eugene Gubenkov
|
|
@@ -106,6 +106,37 @@ The `--pid=host` and `--net=host` flags allow the container to see host processe
|
|
|
106
106
|
2. It builds a graph of processes (nodes) and their IPC channels (edges).
|
|
107
107
|
3. The **browser frontend** fetches the graph via `GET /api/graph` and renders it using [force-graph](https://github.com/vasturiano/force-graph) with d3 physics simulation.
|
|
108
108
|
|
|
109
|
+
## Development
|
|
110
|
+
|
|
111
|
+
### Prerequisites
|
|
112
|
+
- Python ≥ 3.12, Linux, Docker
|
|
113
|
+
- Node.js 22 runs inside Docker; no host installation required
|
|
114
|
+
|
|
115
|
+
### Backend
|
|
116
|
+
```bash
|
|
117
|
+
python3 -m venv .venv && source .venv/bin/activate
|
|
118
|
+
pip install -e . && pip install -r requirements-dev.in
|
|
119
|
+
python src/sysgraph/app.py # → http://localhost:8000
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Frontend (TypeScript + Vite)
|
|
123
|
+
```bash
|
|
124
|
+
./scripts/build-ui.sh # production build → src/sysgraph/dist/
|
|
125
|
+
./scripts/dev-ui.sh # Vite dev server with HMR on :5173
|
|
126
|
+
./scripts/typecheck-ui.sh # TypeScript type checking
|
|
127
|
+
./scripts/lint-ui.sh # Biome linter (pass --fix to auto-fix)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Tests
|
|
131
|
+
```bash
|
|
132
|
+
pytest src/sysgraph/tests/ # requires Linux /proc
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Python linting
|
|
136
|
+
```bash
|
|
137
|
+
./scripts/lint.sh # ruff check + ruff format + isort
|
|
138
|
+
```
|
|
139
|
+
|
|
109
140
|
## License
|
|
110
141
|
|
|
111
142
|
[MIT](LICENSE)
|
|
@@ -63,6 +63,37 @@ The `--pid=host` and `--net=host` flags allow the container to see host processe
|
|
|
63
63
|
2. It builds a graph of processes (nodes) and their IPC channels (edges).
|
|
64
64
|
3. The **browser frontend** fetches the graph via `GET /api/graph` and renders it using [force-graph](https://github.com/vasturiano/force-graph) with d3 physics simulation.
|
|
65
65
|
|
|
66
|
+
## Development
|
|
67
|
+
|
|
68
|
+
### Prerequisites
|
|
69
|
+
- Python ≥ 3.12, Linux, Docker
|
|
70
|
+
- Node.js 22 runs inside Docker; no host installation required
|
|
71
|
+
|
|
72
|
+
### Backend
|
|
73
|
+
```bash
|
|
74
|
+
python3 -m venv .venv && source .venv/bin/activate
|
|
75
|
+
pip install -e . && pip install -r requirements-dev.in
|
|
76
|
+
python src/sysgraph/app.py # → http://localhost:8000
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Frontend (TypeScript + Vite)
|
|
80
|
+
```bash
|
|
81
|
+
./scripts/build-ui.sh # production build → src/sysgraph/dist/
|
|
82
|
+
./scripts/dev-ui.sh # Vite dev server with HMR on :5173
|
|
83
|
+
./scripts/typecheck-ui.sh # TypeScript type checking
|
|
84
|
+
./scripts/lint-ui.sh # Biome linter (pass --fix to auto-fix)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Tests
|
|
88
|
+
```bash
|
|
89
|
+
pytest src/sysgraph/tests/ # requires Linux /proc
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Python linting
|
|
93
|
+
```bash
|
|
94
|
+
./scripts/lint.sh # ruff check + ruff format + isort
|
|
95
|
+
```
|
|
96
|
+
|
|
66
97
|
## License
|
|
67
98
|
|
|
68
99
|
[MIT](LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.16"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--z-toolbar: 100;--z-search-help: 150;--z-context-menu: 200;--z-details-panel: 50;--z-selection-overlay: 10;--z-version-badge: 10;--z-zoom-indicator: 10;--bg-toolbar: rgba(255, 255, 255, .95);--bg-panel: rgba(255, 255, 255, .97);--border-subtle: rgba(0, 0, 0, .08);--border-light: rgba(0, 0, 0, .1);--border-medium: rgba(0, 0, 0, .12);--shadow-xs: rgba(0, 0, 0, .08);--shadow-sm: rgba(0, 0, 0, .14);--shadow-md: rgba(0, 0, 0, .15);--accent-primary: #1a56db;--accent-info: #1a73e8;--accent-danger: #dc2626;--toolbar-height: 48px;--spacing-xs: 4px;--spacing-sm: 6px;--spacing-md: 8px;--spacing-lg: 16px;--font-family: "Ubuntu", "Segoe UI", "Arial", sans-serif;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-md: 13px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--button-height: 28px;--icon-button-size: 24px;--tp-base-background-color: hsla(230, 5%, 90%, 1);--tp-base-shadow-color: hsla(0, 0%, 0%, .1);--tp-button-background-color: hsla(230, 7%, 75%, 1);--tp-button-background-color-active: hsla(230, 7%, 60%, 1);--tp-button-background-color-focus: hsla(230, 7%, 65%, 1);--tp-button-background-color-hover: hsla(230, 7%, 70%, 1);--tp-button-foreground-color: hsla(230, 10%, 30%, 1);--tp-container-background-color: hsla(230, 15%, 30%, .2);--tp-container-background-color-active: hsla(230, 15%, 30%, .32);--tp-container-background-color-focus: hsla(230, 15%, 30%, .28);--tp-container-background-color-hover: hsla(230, 15%, 30%, .24);--tp-container-foreground-color: hsla(230, 10%, 30%, 1);--tp-groove-foreground-color: hsla(230, 15%, 30%, .1);--tp-input-background-color: hsla(230, 15%, 30%, .1);--tp-input-background-color-active: hsla(230, 15%, 30%, .22);--tp-input-background-color-focus: hsla(230, 15%, 30%, .18);--tp-input-background-color-hover: hsla(230, 15%, 30%, .14);--tp-input-foreground-color: hsla(230, 10%, 30%, 1);--tp-label-foreground-color: hsla(230, 10%, 30%, .7);--tp-monitor-background-color: hsla(230, 15%, 30%, .1);--tp-monitor-foreground-color: hsla(230, 10%, 30%, .5)}html,body{height:100%;margin:0;overflow:hidden;font-family:var(--font-family)}#toolbar{position:fixed;top:0;left:0;right:0;height:var(--toolbar-height);z-index:var(--z-toolbar);background:var(--bg-toolbar);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 var(--spacing-lg);gap:var(--spacing-sm);box-shadow:0 1px 3px var(--shadow-xs)}#toolbar md-outlined-button{--md-outlined-button-container-height: var(--button-height);--md-outlined-button-label-text-size: var(--font-size-sm);--md-outlined-button-label-text-weight: 500;--md-outlined-button-icon-size: 16px;--md-outlined-button-leading-space: 10px;--md-outlined-button-trailing-space: 12px;--md-outlined-button-icon-offset: -2px;--md-outlined-button-container-shape: var(--radius-sm)}md-outlined-button.active{--md-outlined-button-container-color: #d0e1ff;--md-outlined-button-label-text-color: var(--accent-primary);--md-outlined-button-outline-color: var(--accent-primary);--md-outlined-button-icon-color: var(--accent-primary)}md-outlined-button.danger{--md-outlined-button-label-text-color: var(--accent-danger);--md-outlined-button-outline-color: var(--accent-danger);--md-outlined-button-icon-color: var(--accent-danger)}.toolbar-separator{width:1px;height:var(--icon-button-size);background:var(--border-light)}#searchInput{width:240px;height:var(--button-height);--md-outlined-text-field-container-shape: var(--radius-sm);--md-outlined-text-field-top-space: var(--spacing-xs);--md-outlined-text-field-bottom-space: var(--spacing-xs);--md-outlined-text-field-input-text-size: var(--font-size-sm);--md-outlined-text-field-label-text-size: var(--font-size-sm)}#searchHelpTrigger{--md-icon-button-icon-size: 18px;--md-icon-button-state-layer-height: var(--button-height);--md-icon-button-state-layer-width: var(--button-height);height:var(--button-height);width:var(--button-height)}.search-help-anchor{position:relative;display:inline-flex}#searchHelp{display:none;position:absolute;top:100%;left:0;margin-top:var(--spacing-xs);z-index:var(--z-search-help);border:1px solid var(--border-medium);border-radius:var(--radius-md);padding:10px 14px;box-shadow:0 4px 12px var(--shadow-md);font-size:var(--font-size-sm);line-height:1.5;background:#1e293b;color:#fff}#searchHelp.open{display:block}#searchHelp code{background:#ffffff1f;padding:1px var(--spacing-xs);border-radius:3px}#content{position:fixed;top:var(--toolbar-height);left:0;right:0;bottom:0}#graph{width:100%;height:100%;position:relative}.details-panel{position:absolute;top:var(--spacing-md);left:var(--spacing-md);width:fit-content;max-width:420px;height:auto;min-width:200px;min-height:120px;max-height:min(350px,calc(100% - var(--spacing-lg)));z-index:var(--z-details-panel);background:var(--bg-panel);box-shadow:0 2px 12px var(--shadow-sm);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);display:none;flex-direction:column;overflow:hidden;resize:both}.details-panel.open{display:flex}.details-panel .panel-header{display:flex;align-items:center;height:var(--button-height);padding:0 2px 0 10px;border-bottom:1px solid var(--border-subtle);flex-shrink:0;cursor:grab;-webkit-user-select:none;user-select:none}.details-panel .panel-header:active{cursor:grabbing}.details-panel .panel-title{font-size:var(--font-size-sm);font-weight:500;color:#333;flex:1}.details-panel md-icon-button{--md-icon-button-icon-size: 16px;--md-icon-button-state-layer-height: var(--icon-button-size);--md-icon-button-state-layer-width: var(--icon-button-size);height:var(--icon-button-size);width:var(--icon-button-size)}.details-panel .panel-body{flex:1;overflow-y:auto;min-height:0;padding:var(--spacing-md);font-family:var(--font-family)}#detailsPanel{border-left:3px solid var(--accent-info)}#detailsPanel .panel-header{background:#1a73e80f}#contextMenu{display:none;position:fixed;z-index:var(--z-context-menu);background:var(--bg-panel);border:1px solid var(--border-medium);border-radius:var(--spacing-sm);padding:var(--spacing-xs) 0;box-shadow:0 4px 12px var(--shadow-md);min-width:160px;font-size:var(--font-size-md)}.context-menu-item{padding:var(--spacing-sm) 14px;cursor:pointer;-webkit-user-select:none;user-select:none}.context-menu-item:hover{background:#0000000f}.context-menu-divider{height:1px;margin:var(--spacing-xs) 0;background:var(--border-medium)}.tp-rotv{font-family:var(--font-family)!important;opacity:.9}#settingsPane{max-height:calc(100% - 20px);position:absolute;overflow-y:auto;right:10px;top:10px}#version-badge{position:fixed;bottom:var(--spacing-sm);right:var(--spacing-md);font-size:var(--font-size-xs);color:#0000004d;pointer-events:none;z-index:var(--z-version-badge);font-family:var(--font-family)}#zoom-indicator{position:fixed;bottom:var(--spacing-md);left:var(--spacing-md);z-index:var(--z-zoom-indicator);display:flex;align-items:center;gap:0;background:var(--bg-toolbar);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:0 1px 4px var(--shadow-xs);padding:0 var(--spacing-xs)}#zoom-indicator md-icon-button{--md-icon-button-icon-size: 16px;--md-icon-button-state-layer-height: var(--button-height);--md-icon-button-state-layer-width: var(--button-height);height:var(--button-height);width:var(--button-height)}#zoomLevel{font-size:var(--font-size-xs);font-family:var(--font-family);color:#555;min-width:34px;text-align:center;-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:var(--radius-sm);padding:2px var(--spacing-xs);transition:background .1s}#zoomLevel:hover{background:#0000000f}.muted{color:#666}hr{border:none;border-top:1px solid var(--border-subtle);margin:var(--spacing-sm) 0}
|