diff options
author | Rasmus Luha <rasmus.luha@ut.ee> | 2025-04-05 01:03:31 +0300 |
---|---|---|
committer | Rasmus Luha <rasmus.luha@ut.ee> | 2025-04-05 01:03:31 +0300 |
commit | 488f00e56f8f5f6c5b7b3968ed9d95dd6e8edcb6 (patch) | |
tree | 13b63b3001db9c0c7fdc95dd5095e0032881f7b8 |
init commit
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | README.md | 0 | ||||
-rw-r--r-- | common/__init__.py | 0 | ||||
-rw-r--r-- | config.py | 0 | ||||
-rw-r--r-- | main.py | 30 | ||||
-rw-r--r-- | modules/__init__.py | 0 | ||||
-rw-r--r-- | modules/__pycache__/__init__.cpython-312.pyc | bin | 0 -> 151 bytes | |||
-rw-r--r-- | modules/nifi/__init__.py | 0 | ||||
-rw-r--r-- | modules/nifi/__pycache__/__init__.cpython-312.pyc | bin | 0 -> 156 bytes | |||
-rw-r--r-- | modules/nifi/__pycache__/core.cpython-312.pyc | bin | 0 -> 1642 bytes | |||
-rw-r--r-- | modules/nifi/clean.json | 1272 | ||||
-rw-r--r-- | modules/nifi/core.py | 36 | ||||
-rw-r--r-- | modules/telegraf/__init__.py | 0 | ||||
-rw-r--r-- | modules/telegraf/__pycache__/__init__.cpython-312.pyc | bin | 0 -> 160 bytes | |||
-rw-r--r-- | modules/telegraf/__pycache__/core.cpython-312.pyc | bin | 0 -> 585 bytes | |||
-rw-r--r-- | modules/telegraf/core.py | 10 | ||||
-rw-r--r-- | requirements.txt | 10 |
17 files changed, 1359 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f7275bb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +venv/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/README.md diff --git a/common/__init__.py b/common/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/common/__init__.py diff --git a/config.py b/config.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/config.py @@ -0,0 +1,30 @@ +from modules.nifi import core as nifi +from modules.telegraf import core as telegraf + +AVAILABLE_PLATFORMS = { + "1": ("Nifi", nifi), + "2": ("Telegraf", telegraf)} + + +def list_platforms(): + print("Available platforms:") + for key, (name, _) in AVAILABLE_PLATFORMS.items(): + print(f"{key}. {name}") + + +def main(): + list_platforms() + plat_choice = input("Palun vali platform (number): ").strip() + + platform = AVAILABLE_PLATFORMS.get(plat_choice) + if not platform: + print("Ebaõnnestunud valik ...") + return + + name, module = platform + module.introduction() + module.build_pipeline() + + +if __name__ == "__main__": + main() diff --git a/modules/__init__.py b/modules/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/modules/__init__.py diff --git a/modules/__pycache__/__init__.cpython-312.pyc b/modules/__pycache__/__init__.cpython-312.pyc Binary files differnew file mode 100644 index 0000000..2ee9eaf --- /dev/null +++ b/modules/__pycache__/__init__.cpython-312.pyc diff --git a/modules/nifi/__init__.py b/modules/nifi/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/modules/nifi/__init__.py diff --git a/modules/nifi/__pycache__/__init__.cpython-312.pyc b/modules/nifi/__pycache__/__init__.cpython-312.pyc Binary files differnew file mode 100644 index 0000000..b247e4b --- /dev/null +++ b/modules/nifi/__pycache__/__init__.cpython-312.pyc diff --git a/modules/nifi/__pycache__/core.cpython-312.pyc b/modules/nifi/__pycache__/core.cpython-312.pyc Binary files differnew file mode 100644 index 0000000..503640b --- /dev/null +++ b/modules/nifi/__pycache__/core.cpython-312.pyc diff --git a/modules/nifi/clean.json b/modules/nifi/clean.json new file mode 100644 index 0000000..457c783 --- /dev/null +++ b/modules/nifi/clean.json @@ -0,0 +1,1272 @@ +{ + "flowContents": { + "identifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "instanceIdentifier": "5bb8e7b5-0194-1000-5e19-bee2ad8d9a6e", + "name": "testingName", + "comments": "", + "position": { + "x": -536.0, + "y": -328.0 + }, + "processGroups": [], + "remoteProcessGroups": [], + "processors": [ + { + "identifier": "d7963d52-e8a3-3b27-9543-20db6cc99f6f", + "instanceIdentifier": "9f1ceb8b-f048-3b47-5aec-773690811078", + "name": "ReplaceText", + "comments": "", + "position": { + "x": -208.0, + "y": -968.0 + }, + "type": "org.apache.nifi.processors.standard.ReplaceText", + "bundle": { + "group": "org.apache.nifi", + "artifact": "nifi-standard-nar", + "version": "2.1.0" + }, + "properties": { + "Regular Expression": "(?s)(^.*$)", + "Replacement Value": "energy,building=\"Delta\" kilowattHours=${energy_value}", + "Evaluation Mode": "Entire text", + "Text to Prepend": null, + "Line-by-Line Evaluation Mode": "All", + "Character Set": "UTF-8", + "Maximum Buffer Size": "1 MB", + "Replacement Strategy": "Regex Replace", + "Text to Append": null + }, + "propertyDescriptors": { + "Regular Expression": { + "name": "Regular Expression", + "displayName": "Search Value", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Replacement Value": { + "name": "Replacement Value", + "displayName": "Replacement Value", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Evaluation Mode": { + "name": "Evaluation Mode", + "displayName": "Evaluation Mode", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Text to Prepend": { + "name": "Text to Prepend", + "displayName": "Text to Prepend", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Line-by-Line Evaluation Mode": { + "name": "Line-by-Line Evaluation Mode", + "displayName": "Line-by-Line Evaluation Mode", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Character Set": { + "name": "Character Set", + "displayName": "Character Set", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Maximum Buffer Size": { + "name": "Maximum Buffer Size", + "displayName": "Maximum Buffer Size", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Replacement Strategy": { + "name": "Replacement Strategy", + "displayName": "Replacement Strategy", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Text to Append": { + "name": "Text to Append", + "displayName": "Text to Append", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + } + }, + "style": {}, + "schedulingPeriod": "0 sec", + "schedulingStrategy": "TIMER_DRIVEN", + "executionNode": "ALL", + "penaltyDuration": "30 sec", + "yieldDuration": "1 sec", + "bulletinLevel": "WARN", + "runDurationMillis": 25, + "concurrentlySchedulableTaskCount": 1, + "autoTerminatedRelationships": [], + "scheduledState": "ENABLED", + "retryCount": 10, + "retriedRelationships": [], + "backoffMechanism": "PENALIZE_FLOWFILE", + "maxBackoffPeriod": "10 mins", + "componentType": "PROCESSOR", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "ba013c53-d8f2-3718-b7dd-d935e8b1413f", + "instanceIdentifier": "44bbe9ed-51fa-3d2b-2bff-e04fc0673ebd", + "name": "InvokeHTTP", + "comments": "", + "position": { + "x": -1416.0, + "y": -752.0 + }, + "type": "org.apache.nifi.processors.standard.InvokeHTTP", + "bundle": { + "group": "org.apache.nifi", + "artifact": "nifi-standard-nar", + "version": "2.1.0" + }, + "properties": { + "Request Content-Encoding": "DISABLED", + "proxy-configuration-service": null, + "Request Multipart Form-Data Filename Enabled": "true", + "Request Chunked Transfer-Encoding Enabled": "false", + "Response Header Request Attributes Prefix": null, + "HTTP/2 Disabled": "False", + "Connection Timeout": "5 secs", + "Response Cookie Strategy": "DISABLED", + "Socket Read Timeout": "15 secs", + "Socket Idle Connections": "5", + "Request Body Enabled": "true", + "HTTP URL": "https://delta.iot.cs.ut.ee/measurement/measurements?source=780&dateFrom=${now():toNumber():minus(86400000):format(\"yyyy-MM-dd\")}T00:00:00Z&dateTo=${now():toNumber():minus(86400000):format(\"yyyy-MM-dd\")}T23:59:59Z&pageSize=200&type=KogEN", + "Request OAuth2 Access Token Provider": null, + "Socket Idle Timeout": "5 mins", + "Response Redirects Enabled": "True", + "Socket Write Timeout": "15 secs", + "Request Header Attributes Pattern": null, + "Response FlowFile Naming Strategy": "RANDOM", + "Response Cache Enabled": "false", + "Request Date Header Enabled": "True", + "Request Failure Penalization Enabled": "false", + "Response Body Attribute Size": "256", + "SSL Context Service": null, + "Response Generation Required": "false", + "Request User-Agent": null, + "Response Header Request Attributes Enabled": "false", + "HTTP Method": "GET", + "Request Username": "rasmus.luha", + "Request Content-Type": "${mime.type}", + "Response Body Attribute Name": null, + "Request Digest Authentication Enabled": "false", + "Request Multipart Form-Data Name": null, + "Response Cache Size": "10MB", + "Response Body Ignored": "false", + "Replacement Value": "energy,building=\"Delta\" kilowattHours=${energy_value}" + }, + "propertyDescriptors": { + "Request Content-Encoding": { + "name": "Request Content-Encoding", + "displayName": "Request Content-Encoding", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "proxy-configuration-service": { + "name": "proxy-configuration-service", + "displayName": "Proxy Configuration Service", + "identifiesControllerService": true, + "sensitive": false, + "dynamic": false + }, + "Request Multipart Form-Data Filename Enabled": { + "name": "Request Multipart Form-Data Filename Enabled", + "displayName": "Request Multipart Form-Data Filename Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Chunked Transfer-Encoding Enabled": { + "name": "Request Chunked Transfer-Encoding Enabled", + "displayName": "Request Chunked Transfer-Encoding Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Header Request Attributes Prefix": { + "name": "Response Header Request Attributes Prefix", + "displayName": "Response Header Request Attributes Prefix", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "HTTP/2 Disabled": { + "name": "HTTP/2 Disabled", + "displayName": "HTTP/2 Disabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Connection Timeout": { + "name": "Connection Timeout", + "displayName": "Connection Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Cookie Strategy": { + "name": "Response Cookie Strategy", + "displayName": "Response Cookie Strategy", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Password": { + "name": "Request Password", + "displayName": "Request Password", + "identifiesControllerService": false, + "sensitive": true, + "dynamic": false + }, + "Socket Read Timeout": { + "name": "Socket Read Timeout", + "displayName": "Socket Read Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Socket Idle Connections": { + "name": "Socket Idle Connections", + "displayName": "Socket Idle Connections", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Body Enabled": { + "name": "Request Body Enabled", + "displayName": "Request Body Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "HTTP URL": { + "name": "HTTP URL", + "displayName": "HTTP URL", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request OAuth2 Access Token Provider": { + "name": "Request OAuth2 Access Token Provider", + "displayName": "Request OAuth2 Access Token Provider", + "identifiesControllerService": true, + "sensitive": false, + "dynamic": false + }, + "Socket Idle Timeout": { + "name": "Socket Idle Timeout", + "displayName": "Socket Idle Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Redirects Enabled": { + "name": "Response Redirects Enabled", + "displayName": "Response Redirects Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Socket Write Timeout": { + "name": "Socket Write Timeout", + "displayName": "Socket Write Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Header Attributes Pattern": { + "name": "Request Header Attributes Pattern", + "displayName": "Request Header Attributes Pattern", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response FlowFile Naming Strategy": { + "name": "Response FlowFile Naming Strategy", + "displayName": "Response FlowFile Naming Strategy", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Cache Enabled": { + "name": "Response Cache Enabled", + "displayName": "Response Cache Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Date Header Enabled": { + "name": "Request Date Header Enabled", + "displayName": "Request Date Header Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Failure Penalization Enabled": { + "name": "Request Failure Penalization Enabled", + "displayName": "Request Failure Penalization Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Body Attribute Size": { + "name": "Response Body Attribute Size", + "displayName": "Response Body Attribute Size", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "SSL Context Service": { + "name": "SSL Context Service", + "displayName": "SSL Context Service", + "identifiesControllerService": true, + "sensitive": false, + "dynamic": false + }, + "Response Generation Required": { + "name": "Response Generation Required", + "displayName": "Response Generation Required", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request User-Agent": { + "name": "Request User-Agent", + "displayName": "Request User-Agent", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Header Request Attributes Enabled": { + "name": "Response Header Request Attributes Enabled", + "displayName": "Response Header Request Attributes Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "HTTP Method": { + "name": "HTTP Method", + "displayName": "HTTP Method", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Username": { + "name": "Request Username", + "displayName": "Request Username", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Content-Type": { + "name": "Request Content-Type", + "displayName": "Request Content-Type", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Body Attribute Name": { + "name": "Response Body Attribute Name", + "displayName": "Response Body Attribute Name", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Digest Authentication Enabled": { + "name": "Request Digest Authentication Enabled", + "displayName": "Request Digest Authentication Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Multipart Form-Data Name": { + "name": "Request Multipart Form-Data Name", + "displayName": "Request Multipart Form-Data Name", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Cache Size": { + "name": "Response Cache Size", + "displayName": "Response Cache Size", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Body Ignored": { + "name": "Response Body Ignored", + "displayName": "Response Body Ignored", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + } + }, + "style": {}, + "schedulingPeriod": "86400 sec", + "schedulingStrategy": "TIMER_DRIVEN", + "executionNode": "ALL", + "penaltyDuration": "30 sec", + "yieldDuration": "1 sec", + "bulletinLevel": "WARN", + "runDurationMillis": 0, + "concurrentlySchedulableTaskCount": 1, + "autoTerminatedRelationships": [ + "Original" + ], + "scheduledState": "ENABLED", + "retryCount": 10, + "retriedRelationships": [], + "backoffMechanism": "PENALIZE_FLOWFILE", + "maxBackoffPeriod": "10 mins", + "componentType": "PROCESSOR", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "fb9a5b80-aa9a-3e1b-86f5-c17db5783812", + "instanceIdentifier": "0bd7b16d-0195-1000-32ad-5b4055f37b22", + "name": "SplitJson", + "comments": "", + "position": { + "x": -1184.0, + "y": -440.0 + }, + "type": "org.apache.nifi.processors.standard.SplitJson", + "bundle": { + "group": "org.apache.nifi", + "artifact": "nifi-standard-nar", + "version": "2.1.0" + }, + "properties": { + "Max String Length": "20 MB", + "Null Value Representation": "empty string", + "JsonPath Expression": "$.measurements[*]" + }, + "propertyDescriptors": { + "Max String Length": { + "name": "Max String Length", + "displayName": "Max String Length", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Null Value Representation": { + "name": "Null Value Representation", + "displayName": "Null Value Representation", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "JsonPath Expression": { + "name": "JsonPath Expression", + "displayName": "JsonPath Expression", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + } + }, + "style": {}, + "schedulingPeriod": "0 sec", + "schedulingStrategy": "TIMER_DRIVEN", + "executionNode": "ALL", + "penaltyDuration": "30 sec", + "yieldDuration": "1 sec", + "bulletinLevel": "WARN", + "runDurationMillis": 0, + "concurrentlySchedulableTaskCount": 1, + "autoTerminatedRelationships": [], + "scheduledState": "ENABLED", + "retryCount": 10, + "retriedRelationships": [], + "backoffMechanism": "PENALIZE_FLOWFILE", + "maxBackoffPeriod": "10 mins", + "componentType": "PROCESSOR", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "b00e49a7-d25a-3d5a-8705-ef4c5e2919e7", + "instanceIdentifier": "6802228d-1680-3d01-dcb3-83febf10560d", + "name": "EvaluateJsonPath", + "comments": "", + "position": { + "x": -648.0, + "y": -608.0 + }, + "type": "org.apache.nifi.processors.standard.EvaluateJsonPath", + "bundle": { + "group": "org.apache.nifi", + "artifact": "nifi-standard-nar", + "version": "2.1.0" + }, + "properties": { + "Destination": "flowfile-attribute", + "Max String Length": "20 MB", + "Return Type": "auto-detect", + "energy_value": "$.KogEN.T.value", + "Null Value Representation": "empty string", + "Path Not Found Behavior": "ignore" + }, + "propertyDescriptors": { + "Destination": { + "name": "Destination", + "displayName": "Destination", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Max String Length": { + "name": "Max String Length", + "displayName": "Max String Length", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Return Type": { + "name": "Return Type", + "displayName": "Return Type", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "energy_value": { + "name": "energy_value", + "displayName": "energy_value", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": true + }, + "Null Value Representation": { + "name": "Null Value Representation", + "displayName": "Null Value Representation", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Path Not Found Behavior": { + "name": "Path Not Found Behavior", + "displayName": "Path Not Found Behavior", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + } + }, + "style": {}, + "schedulingPeriod": "0 sec", + "schedulingStrategy": "TIMER_DRIVEN", + "executionNode": "ALL", + "penaltyDuration": "30 sec", + "yieldDuration": "1 sec", + "bulletinLevel": "WARN", + "runDurationMillis": 0, + "concurrentlySchedulableTaskCount": 1, + "autoTerminatedRelationships": [], + "scheduledState": "ENABLED", + "retryCount": 10, + "retriedRelationships": [], + "backoffMechanism": "PENALIZE_FLOWFILE", + "maxBackoffPeriod": "10 mins", + "componentType": "PROCESSOR", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "5834e54d-4509-3fb8-b672-fb1f450ef408", + "instanceIdentifier": "87c23d87-fa77-32d7-4a2b-d425cddba4c7", + "name": "InvokeHTTP", + "comments": "", + "position": { + "x": -128.0, + "y": -624.0 + }, + "type": "org.apache.nifi.processors.standard.InvokeHTTP", + "bundle": { + "group": "org.apache.nifi", + "artifact": "nifi-standard-nar", + "version": "2.1.0" + }, + "properties": { + "Request Content-Encoding": "DISABLED", + "proxy-configuration-service": null, + "Request Multipart Form-Data Filename Enabled": "true", + "Request Chunked Transfer-Encoding Enabled": "false", + "Response Header Request Attributes Prefix": null, + "HTTP/2 Disabled": "False", + "Connection Timeout": "5 secs", + "Response Cookie Strategy": "DISABLED", + "Socket Read Timeout": "15 secs", + "Socket Idle Connections": "5", + "Request Body Enabled": "true", + "HTTP URL": "http://influxdb:8086/write?db=nifi_deltaEnergy", + "Request OAuth2 Access Token Provider": null, + "Socket Idle Timeout": "5 mins", + "Response Redirects Enabled": "True", + "Socket Write Timeout": "15 secs", + "Request Header Attributes Pattern": null, + "Response FlowFile Naming Strategy": "RANDOM", + "Response Cache Enabled": "false", + "Request Date Header Enabled": "True", + "Request Failure Penalization Enabled": "false", + "Response Body Attribute Size": "256", + "SSL Context Service": null, + "Response Generation Required": "false", + "Request User-Agent": null, + "Response Header Request Attributes Enabled": "false", + "HTTP Method": "POST", + "Request Username": "admin", + "Request Content-Type": "${mime.type}", + "Response Body Attribute Name": null, + "Request Digest Authentication Enabled": "false", + "Request Multipart Form-Data Name": null, + "Response Cache Size": "10MB", + "Response Body Ignored": "false" + }, + "propertyDescriptors": { + "Request Content-Encoding": { + "name": "Request Content-Encoding", + "displayName": "Request Content-Encoding", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "proxy-configuration-service": { + "name": "proxy-configuration-service", + "displayName": "Proxy Configuration Service", + "identifiesControllerService": true, + "sensitive": false, + "dynamic": false + }, + "Request Multipart Form-Data Filename Enabled": { + "name": "Request Multipart Form-Data Filename Enabled", + "displayName": "Request Multipart Form-Data Filename Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Chunked Transfer-Encoding Enabled": { + "name": "Request Chunked Transfer-Encoding Enabled", + "displayName": "Request Chunked Transfer-Encoding Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Header Request Attributes Prefix": { + "name": "Response Header Request Attributes Prefix", + "displayName": "Response Header Request Attributes Prefix", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "HTTP/2 Disabled": { + "name": "HTTP/2 Disabled", + "displayName": "HTTP/2 Disabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Connection Timeout": { + "name": "Connection Timeout", + "displayName": "Connection Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Cookie Strategy": { + "name": "Response Cookie Strategy", + "displayName": "Response Cookie Strategy", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Password": { + "name": "Request Password", + "displayName": "Request Password", + "identifiesControllerService": false, + "sensitive": true, + "dynamic": false + }, + "Socket Read Timeout": { + "name": "Socket Read Timeout", + "displayName": "Socket Read Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Socket Idle Connections": { + "name": "Socket Idle Connections", + "displayName": "Socket Idle Connections", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Body Enabled": { + "name": "Request Body Enabled", + "displayName": "Request Body Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "HTTP URL": { + "name": "HTTP URL", + "displayName": "HTTP URL", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request OAuth2 Access Token Provider": { + "name": "Request OAuth2 Access Token Provider", + "displayName": "Request OAuth2 Access Token Provider", + "identifiesControllerService": true, + "sensitive": false, + "dynamic": false + }, + "Socket Idle Timeout": { + "name": "Socket Idle Timeout", + "displayName": "Socket Idle Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Redirects Enabled": { + "name": "Response Redirects Enabled", + "displayName": "Response Redirects Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Socket Write Timeout": { + "name": "Socket Write Timeout", + "displayName": "Socket Write Timeout", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Header Attributes Pattern": { + "name": "Request Header Attributes Pattern", + "displayName": "Request Header Attributes Pattern", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response FlowFile Naming Strategy": { + "name": "Response FlowFile Naming Strategy", + "displayName": "Response FlowFile Naming Strategy", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Cache Enabled": { + "name": "Response Cache Enabled", + "displayName": "Response Cache Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Date Header Enabled": { + "name": "Request Date Header Enabled", + "displayName": "Request Date Header Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Failure Penalization Enabled": { + "name": "Request Failure Penalization Enabled", + "displayName": "Request Failure Penalization Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Body Attribute Size": { + "name": "Response Body Attribute Size", + "displayName": "Response Body Attribute Size", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "SSL Context Service": { + "name": "SSL Context Service", + "displayName": "SSL Context Service", + "identifiesControllerService": true, + "sensitive": false, + "dynamic": false + }, + "Response Generation Required": { + "name": "Response Generation Required", + "displayName": "Response Generation Required", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request User-Agent": { + "name": "Request User-Agent", + "displayName": "Request User-Agent", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Header Request Attributes Enabled": { + "name": "Response Header Request Attributes Enabled", + "displayName": "Response Header Request Attributes Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "HTTP Method": { + "name": "HTTP Method", + "displayName": "HTTP Method", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Username": { + "name": "Request Username", + "displayName": "Request Username", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Content-Type": { + "name": "Request Content-Type", + "displayName": "Request Content-Type", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Body Attribute Name": { + "name": "Response Body Attribute Name", + "displayName": "Response Body Attribute Name", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Digest Authentication Enabled": { + "name": "Request Digest Authentication Enabled", + "displayName": "Request Digest Authentication Enabled", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Request Multipart Form-Data Name": { + "name": "Request Multipart Form-Data Name", + "displayName": "Request Multipart Form-Data Name", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Cache Size": { + "name": "Response Cache Size", + "displayName": "Response Cache Size", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + }, + "Response Body Ignored": { + "name": "Response Body Ignored", + "displayName": "Response Body Ignored", + "identifiesControllerService": false, + "sensitive": false, + "dynamic": false + } + }, + "style": {}, + "schedulingPeriod": "0 sec", + "schedulingStrategy": "TIMER_DRIVEN", + "executionNode": "ALL", + "penaltyDuration": "30 sec", + "yieldDuration": "1 sec", + "bulletinLevel": "WARN", + "runDurationMillis": 0, + "concurrentlySchedulableTaskCount": 1, + "autoTerminatedRelationships": [], + "scheduledState": "ENABLED", + "retryCount": 10, + "retriedRelationships": [], + "backoffMechanism": "PENALIZE_FLOWFILE", + "maxBackoffPeriod": "10 mins", + "componentType": "PROCESSOR", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + } + ], + "inputPorts": [], + "outputPorts": [ + { + "identifier": "eaff6f84-649b-3677-9935-911028a86f0e", + "instanceIdentifier": "c033503f-2cfe-354d-548c-7710831a646d", + "name": "errors", + "position": { + "x": -760.0, + "y": -1016.0 + }, + "type": "OUTPUT_PORT", + "concurrentlySchedulableTaskCount": 1, + "scheduledState": "ENABLED", + "allowRemoteAccess": false, + "portFunction": "STANDARD", + "componentType": "OUTPUT_PORT", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + } + ], + "connections": [ + { + "identifier": "da4a1ac4-ab2b-3bef-889f-3a3783f8fff2", + "instanceIdentifier": "a70fb3b4-0bc5-3986-a9a8-b35cbe2749e2", + "name": "", + "source": { + "id": "d7963d52-e8a3-3b27-9543-20db6cc99f6f", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "ReplaceText", + "comments": "", + "instanceIdentifier": "9f1ceb8b-f048-3b47-5aec-773690811078" + }, + "destination": { + "id": "5834e54d-4509-3fb8-b672-fb1f450ef408", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "InvokeHTTP", + "comments": "", + "instanceIdentifier": "87c23d87-fa77-32d7-4a2b-d425cddba4c7" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "success" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "8da480cb-332d-3518-a678-554a976ab177", + "instanceIdentifier": "ed8acac9-2ac0-3494-9787-d6889ca9d2ae", + "name": "", + "source": { + "id": "d7963d52-e8a3-3b27-9543-20db6cc99f6f", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "ReplaceText", + "comments": "", + "instanceIdentifier": "9f1ceb8b-f048-3b47-5aec-773690811078" + }, + "destination": { + "id": "eaff6f84-649b-3677-9935-911028a86f0e", + "type": "OUTPUT_PORT", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "errors", + "instanceIdentifier": "c033503f-2cfe-354d-548c-7710831a646d" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "failure" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "2e2a9588-6e83-3fad-9e25-a7e4411f7cbb", + "instanceIdentifier": "0bd8e0f0-0195-1000-b5fa-59bff2ea7c05", + "name": "", + "source": { + "id": "fb9a5b80-aa9a-3e1b-86f5-c17db5783812", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "SplitJson", + "comments": "", + "instanceIdentifier": "0bd7b16d-0195-1000-32ad-5b4055f37b22" + }, + "destination": { + "id": "b00e49a7-d25a-3d5a-8705-ef4c5e2919e7", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "EvaluateJsonPath", + "comments": "", + "instanceIdentifier": "6802228d-1680-3d01-dcb3-83febf10560d" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "split" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "f21c16db-0f95-31a0-9bcc-fc2034a8e5ad", + "instanceIdentifier": "0bd93b2d-0195-1000-1cf6-b09aec356f70", + "name": "", + "source": { + "id": "fb9a5b80-aa9a-3e1b-86f5-c17db5783812", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "SplitJson", + "comments": "", + "instanceIdentifier": "0bd7b16d-0195-1000-32ad-5b4055f37b22" + }, + "destination": { + "id": "eaff6f84-649b-3677-9935-911028a86f0e", + "type": "OUTPUT_PORT", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "errors", + "instanceIdentifier": "c033503f-2cfe-354d-548c-7710831a646d" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "original", + "failure" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "b84a7c01-3942-3334-b543-6cf24a13e313", + "instanceIdentifier": "1bf7d1f1-d115-30a3-2584-4ecc72df55ee", + "name": "", + "source": { + "id": "b00e49a7-d25a-3d5a-8705-ef4c5e2919e7", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "EvaluateJsonPath", + "comments": "", + "instanceIdentifier": "6802228d-1680-3d01-dcb3-83febf10560d" + }, + "destination": { + "id": "eaff6f84-649b-3677-9935-911028a86f0e", + "type": "OUTPUT_PORT", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "errors", + "instanceIdentifier": "c033503f-2cfe-354d-548c-7710831a646d" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "failure", + "unmatched" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "4146e7c5-2050-380e-9d1d-7794ce01b73d", + "instanceIdentifier": "58e1b5f6-2931-3f24-b849-6eaec7239b65", + "name": "", + "source": { + "id": "ba013c53-d8f2-3718-b7dd-d935e8b1413f", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "InvokeHTTP", + "comments": "", + "instanceIdentifier": "44bbe9ed-51fa-3d2b-2bff-e04fc0673ebd" + }, + "destination": { + "id": "eaff6f84-649b-3677-9935-911028a86f0e", + "type": "OUTPUT_PORT", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "errors", + "instanceIdentifier": "c033503f-2cfe-354d-548c-7710831a646d" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "No Retry", + "Retry", + "Failure" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "17634682-cdb7-38bf-b259-343647a490a1", + "instanceIdentifier": "c5525bf4-5a39-331f-e451-36c7d7751286", + "name": "", + "source": { + "id": "5834e54d-4509-3fb8-b672-fb1f450ef408", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "InvokeHTTP", + "comments": "", + "instanceIdentifier": "87c23d87-fa77-32d7-4a2b-d425cddba4c7" + }, + "destination": { + "id": "eaff6f84-649b-3677-9935-911028a86f0e", + "type": "OUTPUT_PORT", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "errors", + "instanceIdentifier": "c033503f-2cfe-354d-548c-7710831a646d" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "Response", + "No Retry", + "Retry", + "Original", + "Failure" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "bae53cad-4e26-36b7-a45b-60257d6a6ea7", + "instanceIdentifier": "9f06da23-1cf0-3bb1-b2c8-f3bf0f8d1308", + "name": "", + "source": { + "id": "b00e49a7-d25a-3d5a-8705-ef4c5e2919e7", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "EvaluateJsonPath", + "comments": "", + "instanceIdentifier": "6802228d-1680-3d01-dcb3-83febf10560d" + }, + "destination": { + "id": "d7963d52-e8a3-3b27-9543-20db6cc99f6f", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "ReplaceText", + "comments": "", + "instanceIdentifier": "9f1ceb8b-f048-3b47-5aec-773690811078" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "matched" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + }, + { + "identifier": "e529f57e-174b-3adc-86ac-326b10703eef", + "instanceIdentifier": "0bd8a1cd-0195-1000-f564-5b19695e6b39", + "name": "", + "source": { + "id": "ba013c53-d8f2-3718-b7dd-d935e8b1413f", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "InvokeHTTP", + "comments": "", + "instanceIdentifier": "44bbe9ed-51fa-3d2b-2bff-e04fc0673ebd" + }, + "destination": { + "id": "fb9a5b80-aa9a-3e1b-86f5-c17db5783812", + "type": "PROCESSOR", + "groupId": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274", + "name": "SplitJson", + "comments": "", + "instanceIdentifier": "0bd7b16d-0195-1000-32ad-5b4055f37b22" + }, + "labelIndex": 0, + "zIndex": 0, + "selectedRelationships": [ + "Response" + ], + "backPressureObjectThreshold": 10000, + "backPressureDataSizeThreshold": "1 GB", + "flowFileExpiration": "0 sec", + "prioritizers": [], + "bends": [], + "loadBalanceStrategy": "DO_NOT_LOAD_BALANCE", + "partitioningAttribute": "", + "loadBalanceCompression": "DO_NOT_COMPRESS", + "componentType": "CONNECTION", + "groupIdentifier": "2ae4bcd4-1c30-34e2-8206-1a0b567f7274" + } + ], + "labels": [], + "funnels": [], + "controllerServices": [], + "defaultFlowFileExpiration": "0 sec", + "defaultBackPressureObjectThreshold": 10000, + "defaultBackPressureDataSizeThreshold": "1 GB", + "scheduledState": "ENABLED", + "executionEngine": "INHERITED", + "maxConcurrentTasks": 1, + "statelessFlowTimeout": "1 min", + "flowFileConcurrency": "UNBOUNDED", + "flowFileOutboundPolicy": "STREAM_WHEN_AVAILABLE", + "componentType": "PROCESS_GROUP" + }, + "externalControllerServices": {}, + "parameterContexts": {}, + "flowEncodingVersion": "1.0", + "parameterProviders": {}, + "latest": false +} diff --git a/modules/nifi/core.py b/modules/nifi/core.py new file mode 100644 index 0000000..82f28b2 --- /dev/null +++ b/modules/nifi/core.py @@ -0,0 +1,36 @@ +from pyfiglet import figlet_format +from rich.console import Console + +import requests + + +def introduction(): + console = Console() + ascii_art = figlet_format("Nifi") + console.print(ascii_art, style="cyan") + + print("Valisid Nifi Platformi!") + + + +def api_url_validness_check(url): + try: + response = requests.get(url) + response.raise_for_status() + response.json() + return True + except (requests.exceptions.RequestException, ValueError) as e: + return False + + + +def build_pipeline(): + api_url = input("Palun sisesta andmete API URL: ").strip() + + if (input("Kas API vajab ka autentimist?(Jah/Ei): ").strip().lower() == 'jah'): + print("TODO") + + if(api_url_validness_check(api_url)): + print("Good") + else: + print("Bad") diff --git a/modules/telegraf/__init__.py b/modules/telegraf/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/modules/telegraf/__init__.py diff --git a/modules/telegraf/__pycache__/__init__.cpython-312.pyc b/modules/telegraf/__pycache__/__init__.cpython-312.pyc Binary files differnew file mode 100644 index 0000000..871e29c --- /dev/null +++ b/modules/telegraf/__pycache__/__init__.cpython-312.pyc diff --git a/modules/telegraf/__pycache__/core.cpython-312.pyc b/modules/telegraf/__pycache__/core.cpython-312.pyc Binary files differnew file mode 100644 index 0000000..78007fc --- /dev/null +++ b/modules/telegraf/__pycache__/core.cpython-312.pyc diff --git a/modules/telegraf/core.py b/modules/telegraf/core.py new file mode 100644 index 0000000..e1bdb70 --- /dev/null +++ b/modules/telegraf/core.py @@ -0,0 +1,10 @@ +from pyfiglet import figlet_format +from rich.console import Console + + +def introduction(): + console = Console() + ascii_art = figlet_format("Telegraf") + console.print(ascii_art, style="cyan") + + print("Valisid Telegraf Platformi!") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c16f892 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +certifi==2025.1.31 +charset-normalizer==3.4.1 +idna==3.10 +markdown-it-py==3.0.0 +mdurl==0.1.2 +pyfiglet==1.0.2 +Pygments==2.19.1 +requests==2.32.3 +rich==14.0.0 +urllib3==2.3.0 |