flexmetric 0.5.2__py3-none-any.whl → 0.5.3__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flexmetric
3
- Version: 0.5.2
3
+ Version: 0.5.3
4
4
  Summary: A secure flexible Prometheus exporter for commands, databases, functions.
5
5
  Home-page: https://github.com/nikhillingadhal1999/flexmetric
6
6
  Author: Nikhil Lingadhal
@@ -33,25 +33,38 @@ Dynamic: requires-dist
33
33
  Dynamic: requires-python
34
34
  Dynamic: summary
35
35
 
36
- # FlexMetric
36
+ FlexMetric is a lightweight, pluggable, and extensible Prometheus exporter that helps you collect, expose, and visualize custom metrics with minimal setup and maximum flexibility.
37
37
 
38
- FlexMetric is a lightweight, flexible, and extensible Prometheus exporter that allows you to securely expose system metrics, database query results, Python function outputs, and externally submitted metrics—via an optional Flask API with HTTPS support—as Prometheus-compatible metrics, all with minimal setup and maximum customization.
38
+ With FlexMetric, you can:
39
39
 
40
- ---
40
+ Run system commands and expose their output as metrics
41
+
42
+ Execute SQL queries against databases like SQLite, PostgreSQL, and ClickHouse
43
+
44
+ Call custom Python functions and export their results
41
45
 
42
- ## Features
46
+ Receive externally submitted metrics via a secure Flask-based API with optional HTTPS (TLS)
43
47
 
44
- - Run shell commands and expose the results as Prometheus metrics.
45
- ➔ **Harmful commands (e.g., file deletion, system shutdown) are blocked for safety.**
46
- - Execute SQL queries (e.g., SQLite) and monitor database statistics.
47
- ➔ **Potentially dangerous queries (e.g., `DROP`, `DELETE`, `TRUNCATE`) are not allowed.**
48
- - Automatically discover and expose Python function outputs as metrics.
49
- - Expose an optional **Flask API** (`/update_metric`) to receive external metrics dynamically.
50
- - Modular and easy to extend—add your own custom integrations.
51
- - Built-in Prometheus HTTP server (`/metrics`) with configurable port.
52
- - **Supports HTTPS** to securely expose both metrics and API endpoints.
53
- - **Input sanitization** is performed to ensure only safe commands and queries are executed.
48
+ All metrics are exposed in Prometheus-compatible format, making them ready for visualization in Grafana or any Prometheus-based monitoring stack.
49
+ ---
54
50
 
51
+ Paste your rich text content here. You can paste directly from Word or other rich text sources.
52
+
53
+ * Run **shell commands** and expose the results as **Prometheus metrics**.
54
+ ➔ _Harmful commands (e.g., file deletion, system shutdown) are blocked for safety._
55
+
56
+ * Execute **SQL queries** and monitor database statistics:
57
+
58
+ * **SQLite** (lightweight, file-based databases)
59
+ * **PostgreSQL** (robust, production-grade relational databases)
60
+ * **ClickHouse** (high-performance, analytical databases)
61
+ * Potentially dangerous queries (e.g., `DROP`, `DELETE`, `TRUNCATE`) are blocked by default.
62
+ * Automatically discover and expose **Python function outputs** as metrics.
63
+ * Expose an optional **Flask API** (`/update_metric`) to receive and update external metrics **dynamically**.
64
+ * Modular and **easy to extend**—add your own **custom integrations** with minimal effort.
65
+ * Built-in **Prometheus-compatible HTTP server** (`/metrics`) with configurable port.
66
+ * Supports **HTTPS** to securely expose both the metrics endpoint and API.
67
+ * Input **sanitization and validation** ensure only safe commands and queries are executed.
55
68
 
56
69
  ---
57
70
 
@@ -190,52 +203,99 @@ Filesystem Size Used Avail Use% Mounted on
190
203
  | `timeout_seconds` | Maximum time (in seconds) to wait for the command to complete. If it exceeds this time, the command is aborted. |
191
204
 
192
205
  ## Database mode
206
+ ## 🔗 Supported Database Connections
207
+
208
+ FlexMetric supports fetching and exposing metrics from multiple databases using a simple YAML-based configuration. This allows you to monitor data directly from your existing data sources without writing custom code.
209
+
210
+ ### ✅ Currently Supported Databases:
211
+
212
+ | Database | Type Name | Description |
213
+ |--------------|---------------|--------------------------------------------------|
214
+ | **SQLite** | `sqlite` | Lightweight, file-based relational database |
215
+ | **PostgreSQL** | `postgres` | Robust, production-grade relational database |
216
+ | **ClickHouse** | `clickhouse` | High-performance, analytical columnar database |
217
+
218
+ ---
219
+
220
+ ### 📄 Example `database.yaml` Configuration:
193
221
  file - database.yaml
194
222
  ```yaml
195
223
  databases:
196
- - id: "active_user_count"
224
+ - id: "local_sqlite"
225
+ type: "sqlite"
226
+ db_connection: "/path/to/example.db"
227
+
228
+ - id: "analytics_pg"
229
+ type: "postgres"
230
+ host: "localhost"
231
+ port: 5432
232
+ database: "metricsdb"
233
+ username: "postgres"
234
+ password: "postgres_password"
235
+ sslmode: "disable"
236
+ client_cert: "/path/to/cert.pem"
237
+ client_key: "/path/to/key.pem"
238
+ ca_cert: "/path/to/ca.pem"
239
+
240
+ - id: "clickhouse_cluster"
197
241
  type: "clickhouse"
198
242
  host: "localhost"
199
- port: 8123
243
+ port: 8443
200
244
  username: "default"
201
- password: ""
202
- client_cert: ""
203
- client_key: ""
204
- ca_cert: ""
205
-
206
- - id: "userdb"
207
- type: "sqlite"
208
- db_connection: "/path/to/my.db"
245
+ password: "clickhouse_password"
246
+ secure: true
247
+ client_cert: "/path/to/cert.pem"
248
+ client_key: "/path/to/key.pem"
249
+ ca_cert: "/path/to/ca.pem"
209
250
  ```
210
- file - queries.yaml
251
+
252
+ ## Supported Query Configuration
253
+
254
+ FlexMetric allows you to define custom queries in a simple YAML format. Each query is linked to a database using the `database_id` and can expose the results as Prometheus metrics with flexible labeling and value extraction.
255
+
256
+ ### Example `queries.yaml` Configuration:
257
+
211
258
  ```yaml
212
259
  commands:
213
- - id: "active_user_count"
214
- type: "clickhouse"
215
- database_id: "active_user_count"
260
+ - id: "active_user_count_pg"
261
+ type: "postgres"
262
+ database_id: "analytics_pg"
216
263
  query: |
217
264
  SELECT
218
265
  country AS country_name,
219
- COUNT() AS active_user_count
266
+ COUNT(*) AS active_user_count
220
267
  FROM users
221
- WHERE is_active = 1
222
- GROUP BY country
268
+ WHERE is_active = true
269
+ GROUP BY country;
223
270
  main_label: "active_user_count"
224
271
  labels: ["country_name"]
225
272
  value_column: "active_user_count"
226
273
 
227
- - id: "list_all_users_sqlite"
274
+ - id: "total_user_count_sqlite"
228
275
  type: "sqlite"
229
- database_id: "userdb"
276
+ database_id: "local_sqlite"
277
+ query: |
278
+ SELECT
279
+ 'all' AS user_group,
280
+ COUNT(*) AS total_user_count
281
+ FROM users;
282
+ main_label: "total_user_count"
283
+ labels: ["user_group"]
284
+ value_column: "total_user_count"
285
+
286
+ - id: "clickhouse_user_summary"
287
+ type: "clickhouse"
288
+ database_id: "clickhouse_cluster"
230
289
  query: |
231
290
  SELECT
232
- id,
233
- name
291
+ region AS region_name,
292
+ COUNT() AS user_count
234
293
  FROM users
235
- main_label: "user_list"
236
- labels: ["id", "name"]
237
- value_column: "id"
238
-
294
+ WHERE status = 'active'
295
+ GROUP BY region;
296
+ main_label: "clickhouse_user_count"
297
+ labels: ["region_name"]
298
+ value_column: "user_count"
239
299
  ```
240
300
  ## Functions mode
241
301
 
@@ -13,8 +13,8 @@ flexmetric/metric_process/process_commands.py,sha256=clGMQhLNcuJUO1gElpAS9Dyk0KU
13
13
  flexmetric/metric_process/prometheus_agent.py,sha256=pDPqiPtHLv1cfF6dPRNg2LtAhVF1UKf8MNZ_S9xuRQY,7712
14
14
  flexmetric/metric_process/queries_execution.py,sha256=ed8GnWbBdvCb7WfQOmeJdpR0DarF_EHbXBPc6tKaEyg,1229
15
15
  flexmetric/metric_process/views.py,sha256=BY695dCpTkJRc1KLC9RNpFTieFdHeHvyqyefmHhMauE,3297
16
- flexmetric-0.5.2.dist-info/METADATA,sha256=rDkws5sg0EbOrR9r_yoOp3ZhdM7av_7ddXMg9YIXFPw,11307
17
- flexmetric-0.5.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
18
- flexmetric-0.5.2.dist-info/entry_points.txt,sha256=urVePn5EWr3JqNvkYP7OsB_h2_Bqvv-Wq1MJRBexm8A,79
19
- flexmetric-0.5.2.dist-info/top_level.txt,sha256=zBlrNwKhXUNhgu9RRZnXxYwYnmE-eocRe6wKSmQROA4,11
20
- flexmetric-0.5.2.dist-info/RECORD,,
16
+ flexmetric-0.5.3.dist-info/METADATA,sha256=CVkAz_6fG6cJgoKN7e_GB-RxTBQJM1ehGz_s5p23Q8I,13820
17
+ flexmetric-0.5.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
18
+ flexmetric-0.5.3.dist-info/entry_points.txt,sha256=urVePn5EWr3JqNvkYP7OsB_h2_Bqvv-Wq1MJRBexm8A,79
19
+ flexmetric-0.5.3.dist-info/top_level.txt,sha256=zBlrNwKhXUNhgu9RRZnXxYwYnmE-eocRe6wKSmQROA4,11
20
+ flexmetric-0.5.3.dist-info/RECORD,,