Create messages.py
taylor_socfortress committed
Jul 10, 2023 at 16:43 UTC
1e2bb42a322c66632771bfdee64f3481337263ad
1 file changed
+70
backend/app/services/Graylog/messages.py
new
+70
@@ -0,0 +1,70 @@
1
+from app.models.agents import (
2
+ AgentMetadata,
3
+ agent_metadata_schema,
4
+ agent_metadatas_schema,
5
+)
6
+from app import db
7
+from datetime import datetime
8
+import requests
9
+from loguru import logger
10
+from app.models.connectors import connector_factory, Connector, GraylogConnector
11
+from app.services.Graylog.universal import UniversalService
12
+
13
+
14
+class MessagesService:
15
+ """
16
+ A service class that encapsulates the logic for polling messages from Graylog.
17
+ """
18
+
19
+ def collect_messages(self):
20
+ """
21
+ Collects the latest 10 messages from Graylog.
22
+
23
+ Returns:
24
+ list: A list containing the messages.
25
+ """
26
+ (
27
+ connector_url,
28
+ connector_username,
29
+ connector_password,
30
+ ) = UniversalService().collect_graylog_details("Graylog")
31
+ if (
32
+ connector_url is None
33
+ or connector_username is None
34
+ or connector_password is None
35
+ ):
36
+ return {"message": "Failed to collect Graylog details", "success": False}
37
+ else:
38
+ try:
39
+ # Get the Graylog Journal Messages where a parameter of `page` is passed with an integer value of `1`
40
+ page_number = 1
41
+ graylog_messages = requests.get(
42
+ f"{connector_url}/api/system/messages?page={page_number}",
43
+ auth=(connector_username, connector_password),
44
+ verify=False,
45
+ )
46
+ # If the response is successful, return the messages as a list
47
+ if graylog_messages.status_code == 200:
48
+ logger.info(
49
+ f"Received {len(graylog_messages.json()['messages'])} messages from Graylog"
50
+ )
51
+ return {
52
+ "message": "Successfully retrieved messages",
53
+ "success": True,
54
+ "graylog_messages": graylog_messages.json()["messages"],
55
+ }
56
+ # Otherwise, return an error message
57
+ else:
58
+ logger.error(
59
+ f"Failed to collect messages from Graylog: {graylog_messages.json()}"
60
+ )
61
+ return {
62
+ "message": "Failed to collect messages from Graylog",
63
+ "success": False,
64
+ }
65
+ except Exception as e:
66
+ logger.error(f"Failed to collect messages from Graylog: {e}")
67
+ return {
68
+ "message": "Failed to collect messages from Graylog",
69
+ "success": False,
70
+ }