monitorify 1.0.2__tar.gz → 1.0.3__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 (50) hide show
  1. monitorify-1.0.3/PKG-INFO +142 -0
  2. monitorify-1.0.3/README.md +130 -0
  3. {monitorify-1.0.2 → monitorify-1.0.3}/pyproject.toml +1 -1
  4. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/__init__.py +1 -1
  5. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/css/tui.css +18 -0
  6. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/tui.py +8 -0
  7. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/programmListWidget.py +75 -7
  8. monitorify-1.0.3/src/monitorify.egg-info/PKG-INFO +142 -0
  9. monitorify-1.0.2/PKG-INFO +0 -62
  10. monitorify-1.0.2/README.md +0 -50
  11. monitorify-1.0.2/src/monitorify.egg-info/PKG-INFO +0 -62
  12. {monitorify-1.0.2 → monitorify-1.0.3}/setup.cfg +0 -0
  13. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/__main__.py +0 -0
  14. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/collector/__init__.py +0 -0
  15. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/collector/manager.py +0 -0
  16. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/collector/schema.py +0 -0
  17. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/collector/worker.py +0 -0
  18. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/config/__init__.py +0 -0
  19. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/config/configManager.py +0 -0
  20. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/config.py +0 -0
  21. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/config_manager.py +0 -0
  22. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/daemon.py +0 -0
  23. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/main.py +0 -0
  24. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/remote/__init__.py +0 -0
  25. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/remote/connector.py +0 -0
  26. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/stats/DiskStats.py +0 -0
  27. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/stats/__init__.py +0 -0
  28. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/stats/cpuStats.py +0 -0
  29. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/stats/networkStats.py +0 -0
  30. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/stats/programmList.py +0 -0
  31. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/stats/ramStats.py +0 -0
  32. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/storage/__init__.py +0 -0
  33. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/storage/db.py +0 -0
  34. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/__init__.py +0 -0
  35. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/__init__.py +0 -0
  36. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/components/menu.py +0 -0
  37. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/components/widgetManager.py +0 -0
  38. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/__init__.py +0 -0
  39. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/brailleGraph.py +0 -0
  40. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/cpuWidget.py +0 -0
  41. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/diskWidget.py +0 -0
  42. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/networkWidget.py +0 -0
  43. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/procInfoWidget.py +0 -0
  44. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/ramWidget.py +0 -0
  45. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify/ui/tui/widgets/statusWidget.py +0 -0
  46. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify.egg-info/SOURCES.txt +0 -0
  47. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify.egg-info/dependency_links.txt +0 -0
  48. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify.egg-info/entry_points.txt +0 -0
  49. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify.egg-info/requires.txt +0 -0
  50. {monitorify-1.0.2 → monitorify-1.0.3}/src/monitorify.egg-info/top_level.txt +0 -0
@@ -0,0 +1,142 @@
1
+ Metadata-Version: 2.4
2
+ Name: monitorify
3
+ Version: 1.0.3
4
+ Summary: A lightweight Linux terminal system monitor built with Textual
5
+ Author: Leon
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: textual>=0.80.0
10
+ Requires-Dist: platformdirs>=4.0.0
11
+ Requires-Dist: rich>=13.0.0
12
+
13
+ # Monitorify
14
+ ### A terminal montioring tool for linux
15
+
16
+ - Features
17
+ - CPU monitoring
18
+ - RAM monitoring
19
+ - Network monitoring
20
+ - Disk monitoring (I/O and storage capacity)
21
+ - Process monitoring
22
+ - Background daemon
23
+ - Customization menu (toggle widgets, set intervals, and change history window)
24
+ - Historical graphs
25
+
26
+ ## Requirements
27
+
28
+ * **Python:** 3.10+
29
+ * **OS:** Linux (relies on `/proc` and `/sys` filesystems)
30
+ * **Terminal:** Minimum 80 columns × 24 lines recommended
31
+
32
+ ## Installation
33
+ ### Using pipx
34
+ ```bash
35
+ pipx install git+https://github.com/leonst036/Monitorify.git
36
+ ```
37
+ Or from PyPI:
38
+ ```bash
39
+ pipx install monitorify
40
+ ```
41
+
42
+ ### Using pip
43
+ ```bash
44
+ pip install git+https://github.com/leonst036/Monitorify.git
45
+ ```
46
+
47
+ ### Using source
48
+ ```bash
49
+ git clone https://github.com/leonst036/Monitorify.git
50
+ cd Monitorify
51
+ pip install .
52
+ ```
53
+
54
+ ## Usage
55
+ ```bash
56
+ monitorify
57
+ ```
58
+
59
+ ## Background Daemon
60
+
61
+ The daemon collects metrics continuously to SQLite, even when the dashboard is closed.
62
+
63
+ ### Manually (foreground)
64
+
65
+ ```bash
66
+ monitorify-daemon
67
+ ```
68
+
69
+ ### Always-On via systemd --user
70
+
71
+ Create the service file at `~/.config/systemd/user/monitorify.service`:
72
+
73
+ ```ini
74
+ [Unit]
75
+ Description=Monitorify Metrics Collector Daemon
76
+
77
+ [Service]
78
+ ExecStart=%h/.local/bin/monitorify-daemon
79
+ Restart=always
80
+
81
+ [Install]
82
+ WantedBy=default.target
83
+ ```
84
+
85
+ Enable and start it:
86
+
87
+ ```bash
88
+ systemctl --user daemon-reload
89
+ systemctl --user enable --now monitorify
90
+ ```
91
+
92
+ Check status or logs:
93
+
94
+ ```bash
95
+ systemctl --user status monitorify
96
+ journalctl --user -u monitorify -f
97
+ ```
98
+
99
+ Stop or disable:
100
+
101
+ ```bash
102
+ systemctl --user stop monitorify
103
+ systemctl --user disable monitorify
104
+ ```
105
+
106
+ ## File Locations
107
+
108
+ Monitorify follows XDG Base Directory conventions — nothing is written to the install directory.
109
+
110
+ | Purpose | Default Path | Override |
111
+ |---|---|---|
112
+ | **Database** | `~/.local/share/monitorify/monitorify.db` | `MONITORIFY_DB_PATH` env var |
113
+ | **Daemon PID** | `/run/user/<uid>/monitorify/daemon.pid` | `MONITORIFY_PID_PATH` env var |
114
+ | **Collection interval** | `1.0` seconds | `MONITORIFY_INTERVAL` env var |
115
+ | **Data retention** | `604800` s (7 days) | `MONITORIFY_RETENTION` env var |
116
+
117
+ ## Remote
118
+
119
+ To use Monitorify remotely over SSH on your server, you can set the following parameters:
120
+
121
+ - `--ip` – Set the target IP address.
122
+ - `--port` – Set the SSH port.
123
+ - `--username` – Set the username for the remote host.
124
+ - `--password` – Set the password for the SSH server.
125
+ - `--key_filename` – Set the path to an SSH key *(optional)*.
126
+
127
+ ## Tech Stack
128
+
129
+ * **Language & TUI:** Python, Textual
130
+ * **Database:** SQLite
131
+ * **Target OS:** Linux
132
+
133
+ ## Uninstalling
134
+
135
+ ```bash
136
+ # If installed via pipx
137
+ pipx uninstall monitorify
138
+
139
+ # Remove stored data
140
+ rm -rf ~/.local/share/monitorify
141
+ rm -rf /run/user/$(id -u)/monitorify
142
+ ```
@@ -0,0 +1,130 @@
1
+ # Monitorify
2
+ ### A terminal montioring tool for linux
3
+
4
+ - Features
5
+ - CPU monitoring
6
+ - RAM monitoring
7
+ - Network monitoring
8
+ - Disk monitoring (I/O and storage capacity)
9
+ - Process monitoring
10
+ - Background daemon
11
+ - Customization menu (toggle widgets, set intervals, and change history window)
12
+ - Historical graphs
13
+
14
+ ## Requirements
15
+
16
+ * **Python:** 3.10+
17
+ * **OS:** Linux (relies on `/proc` and `/sys` filesystems)
18
+ * **Terminal:** Minimum 80 columns × 24 lines recommended
19
+
20
+ ## Installation
21
+ ### Using pipx
22
+ ```bash
23
+ pipx install git+https://github.com/leonst036/Monitorify.git
24
+ ```
25
+ Or from PyPI:
26
+ ```bash
27
+ pipx install monitorify
28
+ ```
29
+
30
+ ### Using pip
31
+ ```bash
32
+ pip install git+https://github.com/leonst036/Monitorify.git
33
+ ```
34
+
35
+ ### Using source
36
+ ```bash
37
+ git clone https://github.com/leonst036/Monitorify.git
38
+ cd Monitorify
39
+ pip install .
40
+ ```
41
+
42
+ ## Usage
43
+ ```bash
44
+ monitorify
45
+ ```
46
+
47
+ ## Background Daemon
48
+
49
+ The daemon collects metrics continuously to SQLite, even when the dashboard is closed.
50
+
51
+ ### Manually (foreground)
52
+
53
+ ```bash
54
+ monitorify-daemon
55
+ ```
56
+
57
+ ### Always-On via systemd --user
58
+
59
+ Create the service file at `~/.config/systemd/user/monitorify.service`:
60
+
61
+ ```ini
62
+ [Unit]
63
+ Description=Monitorify Metrics Collector Daemon
64
+
65
+ [Service]
66
+ ExecStart=%h/.local/bin/monitorify-daemon
67
+ Restart=always
68
+
69
+ [Install]
70
+ WantedBy=default.target
71
+ ```
72
+
73
+ Enable and start it:
74
+
75
+ ```bash
76
+ systemctl --user daemon-reload
77
+ systemctl --user enable --now monitorify
78
+ ```
79
+
80
+ Check status or logs:
81
+
82
+ ```bash
83
+ systemctl --user status monitorify
84
+ journalctl --user -u monitorify -f
85
+ ```
86
+
87
+ Stop or disable:
88
+
89
+ ```bash
90
+ systemctl --user stop monitorify
91
+ systemctl --user disable monitorify
92
+ ```
93
+
94
+ ## File Locations
95
+
96
+ Monitorify follows XDG Base Directory conventions — nothing is written to the install directory.
97
+
98
+ | Purpose | Default Path | Override |
99
+ |---|---|---|
100
+ | **Database** | `~/.local/share/monitorify/monitorify.db` | `MONITORIFY_DB_PATH` env var |
101
+ | **Daemon PID** | `/run/user/<uid>/monitorify/daemon.pid` | `MONITORIFY_PID_PATH` env var |
102
+ | **Collection interval** | `1.0` seconds | `MONITORIFY_INTERVAL` env var |
103
+ | **Data retention** | `604800` s (7 days) | `MONITORIFY_RETENTION` env var |
104
+
105
+ ## Remote
106
+
107
+ To use Monitorify remotely over SSH on your server, you can set the following parameters:
108
+
109
+ - `--ip` – Set the target IP address.
110
+ - `--port` – Set the SSH port.
111
+ - `--username` – Set the username for the remote host.
112
+ - `--password` – Set the password for the SSH server.
113
+ - `--key_filename` – Set the path to an SSH key *(optional)*.
114
+
115
+ ## Tech Stack
116
+
117
+ * **Language & TUI:** Python, Textual
118
+ * **Database:** SQLite
119
+ * **Target OS:** Linux
120
+
121
+ ## Uninstalling
122
+
123
+ ```bash
124
+ # If installed via pipx
125
+ pipx uninstall monitorify
126
+
127
+ # Remove stored data
128
+ rm -rf ~/.local/share/monitorify
129
+ rm -rf /run/user/$(id -u)/monitorify
130
+ ```
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "monitorify"
7
- version = "1.0.2"
7
+ version = "1.0.3"
8
8
  description = "A lightweight Linux terminal system monitor built with Textual"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -1,3 +1,3 @@
1
1
  """Monitorify - A lightweight Linux terminal system monitor."""
2
2
 
3
- __version__ = "1.0.2"
3
+ __version__ = "1.0.3"
@@ -62,6 +62,24 @@ ProgrammListWidget>Static {
62
62
  color: #61afef;
63
63
  }
64
64
 
65
+ #programm_list_view ListItem.selected,
66
+ .programm_list_view ListItem.selected {
67
+ background: #284263;
68
+ text-style: bold;
69
+ }
70
+
71
+ #programm_list_view ListItem.selected:hover,
72
+ .programm_list_view ListItem.selected:hover {
73
+ background: #32537d;
74
+ }
75
+
76
+ #programm_list_view ListItem.selected.--highlight,
77
+ .programm_list_view ListItem.selected.--highlight {
78
+ background: #3d6699;
79
+ color: #ffffff;
80
+ text-style: bold;
81
+ }
82
+
65
83
  #network_graph,
66
84
  #disk_graph {
67
85
  width: 1fr;
@@ -7,6 +7,7 @@ from textual.app import App, ComposeResult
7
7
  # pyrefly: ignore [missing-import]
8
8
  from textual.widgets import Header, Footer, Label
9
9
  from textual.containers import Container, Center, Middle
10
+ from textual.events import Click
10
11
  from monitorify.ui.tui.widgets.cpuWidget import CpuWidget
11
12
  from monitorify.ui.tui.widgets.ramWidget import RamWidget
12
13
  from monitorify.ui.tui.widgets.networkWidget import NetworkWidget
@@ -200,6 +201,13 @@ class MonitorifyApp(App):
200
201
  except Exception:
201
202
  pass
202
203
 
204
+ def on_click(self, event: Click) -> None:
205
+ try:
206
+ programm_widget = self.query_one(ProgrammListWidget)
207
+ programm_widget.handle_global_click(event)
208
+ except Exception:
209
+ pass
210
+
203
211
  def on_unmount(self) -> None:
204
212
  self.db.disconnect()
205
213
 
@@ -73,21 +73,20 @@ class ProgrammListWidget(Container):
73
73
 
74
74
  @on(ListView.Selected)
75
75
  def on_list_view_selected(self, event: ListView.Selected) -> None:
76
- idx = self.list_view.index
76
+ idx = event.index if getattr(event, "index", None) is not None else self.list_view.index
77
77
  if idx is not None and 0 <= idx < len(self.current_sorted_data):
78
78
  d = self.current_sorted_data[idx]
79
79
  pid = d.get("pid")
80
80
  if pid is not None:
81
- if self.active_info_pid == pid:
82
- self.active_info_pid = None
83
- else:
84
- self.active_info_pid = pid
81
+ self.active_info_pid = pid
85
82
  self.update_details()
86
83
 
87
84
  @on(ListView.Highlighted)
88
85
  def on_list_view_highlighted(self, event: ListView.Highlighted) -> None:
89
86
  if self.active_info_pid is not None:
90
- idx = self.list_view.index
87
+ idx = getattr(event, "item_index", None)
88
+ if idx is None:
89
+ idx = self.list_view.index
91
90
  if idx is not None and 0 <= idx < len(self.current_sorted_data):
92
91
  d = self.current_sorted_data[idx]
93
92
  pid = d.get("pid")
@@ -95,10 +94,69 @@ class ProgrammListWidget(Container):
95
94
  self.active_info_pid = pid
96
95
  self.update_details()
97
96
 
97
+ def is_child_of_proc_info_box(self, widget) -> bool:
98
+ curr = widget
99
+ while curr:
100
+ if curr is getattr(self, "proc_info_box", None) or getattr(curr, "id", None) == "proc_info_box":
101
+ return True
102
+ curr = getattr(curr, "parent", None)
103
+ return False
104
+
105
+ def get_clicked_list_item_index(self, widget) -> int | None:
106
+ if not hasattr(self, "list_view"):
107
+ return None
108
+ curr = widget
109
+ while curr:
110
+ if isinstance(curr, ListItem) and curr.parent is self.list_view:
111
+ try:
112
+ items = list(self.list_view.query(ListItem))
113
+ return items.index(curr)
114
+ except ValueError:
115
+ return None
116
+ curr = getattr(curr, "parent", None)
117
+ return None
118
+
119
+ def is_header(self, widget) -> bool:
120
+ curr = widget
121
+ while curr:
122
+ if getattr(curr, "id", None) == "programm_list_header":
123
+ return True
124
+ curr = getattr(curr, "parent", None)
125
+ return False
126
+
127
+ def handle_global_click(self, event: Click) -> None:
128
+ item_idx = self.get_clicked_list_item_index(event.widget)
129
+ if item_idx is not None:
130
+ if 0 <= item_idx < len(self.current_sorted_data):
131
+ self.active_info_pid = self.current_sorted_data[item_idx].get("pid")
132
+ self.update_details()
133
+ return
134
+
135
+ if self.is_child_of_proc_info_box(event.widget) or self.is_header(event.widget):
136
+ return
137
+
138
+ if self.active_info_pid is not None:
139
+ self.active_info_pid = None
140
+ self.update_details()
141
+
142
+ def update_selection_classes(self) -> None:
143
+ """Update selected class on ListItems based on active_info_pid."""
144
+ if not hasattr(self, "list_view"):
145
+ return
146
+ items = list(self.list_view.query(ListItem))
147
+ for i, item in enumerate(items):
148
+ is_selected = (
149
+ self.active_info_pid is not None
150
+ and i < len(self.current_sorted_data)
151
+ and self.current_sorted_data[i].get("pid") == self.active_info_pid
152
+ )
153
+ item.set_class(is_selected, "selected")
154
+
98
155
  def update_details(self) -> None:
99
156
  if not hasattr(self, "info_static") or not hasattr(self, "list_view"):
100
157
  return
101
158
 
159
+ self.update_selection_classes()
102
160
  self.info_static.update(f"Processes: {self.total_count}")
103
161
 
104
162
  if not self.display or self.active_info_pid is None:
@@ -191,9 +249,19 @@ class ProgrammListWidget(Container):
191
249
  for i in range(update_limit):
192
250
  formatted_text = _format_process_item(sliced_data[i])
193
251
  existing_items[i].query_one(Static).update(formatted_text)
252
+ is_selected = (
253
+ self.active_info_pid is not None
254
+ and sliced_data[i].get("pid") == self.active_info_pid
255
+ )
256
+ existing_items[i].set_class(is_selected, "selected")
194
257
 
195
258
  if new_count > existing_count:
196
- new_items = [ListItem(Static(_format_process_item(d))) for d in sliced_data[existing_count:]]
259
+ new_items = []
260
+ for d in sliced_data[existing_count:]:
261
+ item = ListItem(Static(_format_process_item(d)))
262
+ if self.active_info_pid is not None and d.get("pid") == self.active_info_pid:
263
+ item.add_class("selected")
264
+ new_items.append(item)
197
265
  self.list_view.extend(new_items)
198
266
  elif existing_count > new_count:
199
267
  for item in existing_items[new_count:]:
@@ -0,0 +1,142 @@
1
+ Metadata-Version: 2.4
2
+ Name: monitorify
3
+ Version: 1.0.3
4
+ Summary: A lightweight Linux terminal system monitor built with Textual
5
+ Author: Leon
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: textual>=0.80.0
10
+ Requires-Dist: platformdirs>=4.0.0
11
+ Requires-Dist: rich>=13.0.0
12
+
13
+ # Monitorify
14
+ ### A terminal montioring tool for linux
15
+
16
+ - Features
17
+ - CPU monitoring
18
+ - RAM monitoring
19
+ - Network monitoring
20
+ - Disk monitoring (I/O and storage capacity)
21
+ - Process monitoring
22
+ - Background daemon
23
+ - Customization menu (toggle widgets, set intervals, and change history window)
24
+ - Historical graphs
25
+
26
+ ## Requirements
27
+
28
+ * **Python:** 3.10+
29
+ * **OS:** Linux (relies on `/proc` and `/sys` filesystems)
30
+ * **Terminal:** Minimum 80 columns × 24 lines recommended
31
+
32
+ ## Installation
33
+ ### Using pipx
34
+ ```bash
35
+ pipx install git+https://github.com/leonst036/Monitorify.git
36
+ ```
37
+ Or from PyPI:
38
+ ```bash
39
+ pipx install monitorify
40
+ ```
41
+
42
+ ### Using pip
43
+ ```bash
44
+ pip install git+https://github.com/leonst036/Monitorify.git
45
+ ```
46
+
47
+ ### Using source
48
+ ```bash
49
+ git clone https://github.com/leonst036/Monitorify.git
50
+ cd Monitorify
51
+ pip install .
52
+ ```
53
+
54
+ ## Usage
55
+ ```bash
56
+ monitorify
57
+ ```
58
+
59
+ ## Background Daemon
60
+
61
+ The daemon collects metrics continuously to SQLite, even when the dashboard is closed.
62
+
63
+ ### Manually (foreground)
64
+
65
+ ```bash
66
+ monitorify-daemon
67
+ ```
68
+
69
+ ### Always-On via systemd --user
70
+
71
+ Create the service file at `~/.config/systemd/user/monitorify.service`:
72
+
73
+ ```ini
74
+ [Unit]
75
+ Description=Monitorify Metrics Collector Daemon
76
+
77
+ [Service]
78
+ ExecStart=%h/.local/bin/monitorify-daemon
79
+ Restart=always
80
+
81
+ [Install]
82
+ WantedBy=default.target
83
+ ```
84
+
85
+ Enable and start it:
86
+
87
+ ```bash
88
+ systemctl --user daemon-reload
89
+ systemctl --user enable --now monitorify
90
+ ```
91
+
92
+ Check status or logs:
93
+
94
+ ```bash
95
+ systemctl --user status monitorify
96
+ journalctl --user -u monitorify -f
97
+ ```
98
+
99
+ Stop or disable:
100
+
101
+ ```bash
102
+ systemctl --user stop monitorify
103
+ systemctl --user disable monitorify
104
+ ```
105
+
106
+ ## File Locations
107
+
108
+ Monitorify follows XDG Base Directory conventions — nothing is written to the install directory.
109
+
110
+ | Purpose | Default Path | Override |
111
+ |---|---|---|
112
+ | **Database** | `~/.local/share/monitorify/monitorify.db` | `MONITORIFY_DB_PATH` env var |
113
+ | **Daemon PID** | `/run/user/<uid>/monitorify/daemon.pid` | `MONITORIFY_PID_PATH` env var |
114
+ | **Collection interval** | `1.0` seconds | `MONITORIFY_INTERVAL` env var |
115
+ | **Data retention** | `604800` s (7 days) | `MONITORIFY_RETENTION` env var |
116
+
117
+ ## Remote
118
+
119
+ To use Monitorify remotely over SSH on your server, you can set the following parameters:
120
+
121
+ - `--ip` – Set the target IP address.
122
+ - `--port` – Set the SSH port.
123
+ - `--username` – Set the username for the remote host.
124
+ - `--password` – Set the password for the SSH server.
125
+ - `--key_filename` – Set the path to an SSH key *(optional)*.
126
+
127
+ ## Tech Stack
128
+
129
+ * **Language & TUI:** Python, Textual
130
+ * **Database:** SQLite
131
+ * **Target OS:** Linux
132
+
133
+ ## Uninstalling
134
+
135
+ ```bash
136
+ # If installed via pipx
137
+ pipx uninstall monitorify
138
+
139
+ # Remove stored data
140
+ rm -rf ~/.local/share/monitorify
141
+ rm -rf /run/user/$(id -u)/monitorify
142
+ ```
monitorify-1.0.2/PKG-INFO DELETED
@@ -1,62 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: monitorify
3
- Version: 1.0.2
4
- Summary: A lightweight Linux terminal system monitor built with Textual
5
- Author: Leon
6
- License: MIT
7
- Requires-Python: >=3.10
8
- Description-Content-Type: text/markdown
9
- Requires-Dist: textual>=0.80.0
10
- Requires-Dist: platformdirs>=4.0.0
11
- Requires-Dist: rich>=13.0.0
12
-
13
- # Monitorify
14
- ### A terminal montioring tool for linux
15
-
16
- - Features
17
- - CPU monitoring
18
- - RAM monitoring
19
- - Network monitoring
20
- - Disk monitoring (I/O and storage capacity)
21
- - Process monitoring
22
- - Background daemon
23
- - Customization menu (toggle widgets, set intervals, and change history window)
24
- - Historical graphs
25
- ## Installation
26
- ### Using pipx
27
- ```bash
28
- pipx install git+https://github.com/leonst036/Monitorify.git
29
- ```
30
-
31
- ### Using pip
32
- ```bash
33
- pip install git+https://github.com/leonst036/Monitorify.git
34
- ```
35
-
36
- ### Using source
37
- ```bash
38
- git clone https://github.com/leonst036/Monitorify.git
39
- cd Monitorify
40
- pip install .
41
- ```
42
-
43
- ## Usage
44
- ```bash
45
- monitorify
46
- ```
47
-
48
- ## Tech Stack
49
-
50
- * **Language & TUI:** Python, Textual
51
- * **Database:** SQLite
52
- * **Target OS:** Linux
53
-
54
- ## Remote
55
-
56
- To use Monitorify remotely over SSH on your server, you can set the following parameters:
57
-
58
- - `--ip` – Set the target IP address.
59
- - `--port` – Set the SSH port.
60
- - `--username` – Set the username for the remote host.
61
- - `--password` – Set the password for the SSH server.
62
- - `--key_filename` – Set the path to an SSH key *(optional)*.
@@ -1,50 +0,0 @@
1
- # Monitorify
2
- ### A terminal montioring tool for linux
3
-
4
- - Features
5
- - CPU monitoring
6
- - RAM monitoring
7
- - Network monitoring
8
- - Disk monitoring (I/O and storage capacity)
9
- - Process monitoring
10
- - Background daemon
11
- - Customization menu (toggle widgets, set intervals, and change history window)
12
- - Historical graphs
13
- ## Installation
14
- ### Using pipx
15
- ```bash
16
- pipx install git+https://github.com/leonst036/Monitorify.git
17
- ```
18
-
19
- ### Using pip
20
- ```bash
21
- pip install git+https://github.com/leonst036/Monitorify.git
22
- ```
23
-
24
- ### Using source
25
- ```bash
26
- git clone https://github.com/leonst036/Monitorify.git
27
- cd Monitorify
28
- pip install .
29
- ```
30
-
31
- ## Usage
32
- ```bash
33
- monitorify
34
- ```
35
-
36
- ## Tech Stack
37
-
38
- * **Language & TUI:** Python, Textual
39
- * **Database:** SQLite
40
- * **Target OS:** Linux
41
-
42
- ## Remote
43
-
44
- To use Monitorify remotely over SSH on your server, you can set the following parameters:
45
-
46
- - `--ip` – Set the target IP address.
47
- - `--port` – Set the SSH port.
48
- - `--username` – Set the username for the remote host.
49
- - `--password` – Set the password for the SSH server.
50
- - `--key_filename` – Set the path to an SSH key *(optional)*.
@@ -1,62 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: monitorify
3
- Version: 1.0.2
4
- Summary: A lightweight Linux terminal system monitor built with Textual
5
- Author: Leon
6
- License: MIT
7
- Requires-Python: >=3.10
8
- Description-Content-Type: text/markdown
9
- Requires-Dist: textual>=0.80.0
10
- Requires-Dist: platformdirs>=4.0.0
11
- Requires-Dist: rich>=13.0.0
12
-
13
- # Monitorify
14
- ### A terminal montioring tool for linux
15
-
16
- - Features
17
- - CPU monitoring
18
- - RAM monitoring
19
- - Network monitoring
20
- - Disk monitoring (I/O and storage capacity)
21
- - Process monitoring
22
- - Background daemon
23
- - Customization menu (toggle widgets, set intervals, and change history window)
24
- - Historical graphs
25
- ## Installation
26
- ### Using pipx
27
- ```bash
28
- pipx install git+https://github.com/leonst036/Monitorify.git
29
- ```
30
-
31
- ### Using pip
32
- ```bash
33
- pip install git+https://github.com/leonst036/Monitorify.git
34
- ```
35
-
36
- ### Using source
37
- ```bash
38
- git clone https://github.com/leonst036/Monitorify.git
39
- cd Monitorify
40
- pip install .
41
- ```
42
-
43
- ## Usage
44
- ```bash
45
- monitorify
46
- ```
47
-
48
- ## Tech Stack
49
-
50
- * **Language & TUI:** Python, Textual
51
- * **Database:** SQLite
52
- * **Target OS:** Linux
53
-
54
- ## Remote
55
-
56
- To use Monitorify remotely over SSH on your server, you can set the following parameters:
57
-
58
- - `--ip` – Set the target IP address.
59
- - `--port` – Set the SSH port.
60
- - `--username` – Set the username for the remote host.
61
- - `--password` – Set the password for the SSH server.
62
- - `--key_filename` – Set the path to an SSH key *(optional)*.
File without changes