31
31
_LOGGER = logging .getLogger ("thoth.graph_backup_job" )
32
32
__version__ = "0.8.12"
33
33
__component_version__ = f"{ __version__ } +thoth_storage.{ __storages__version__ } "
34
+ COMPONENT_NAME = "graph-backup-job"
35
+
34
36
KNOWLEDGE_GRAPH_HOST = os .getenv ("KNOWLEDGE_GRAPH_HOST" , "localhost" )
35
37
KNOWLEDGE_GRAPH_PORT = os .getenv ("KNOWLEDGE_GRAPH_PORT" , "5432" )
36
38
KNOWLEDGE_GRAPH_USER = os .getenv ("KNOWLEDGE_GRAPH_USER" , "postgres" )
49
51
registry = prometheus_registry ,
50
52
)
51
53
54
+ _METRIC_PG_DUMP_STATUS = Gauge (
55
+ "thoth_graph_backup_job" ,
56
+ "Thoth Graph Backup Job save status" ,
57
+ ["env" , "version" ],
58
+ registry = prometheus_registry ,
59
+ )
60
+
52
61
53
62
def _send_metrics ():
54
63
"""Send metrics to pushgateway."""
55
- pushgateway_url = THOTH_METRICS_PUSHGATEWAY_URL
56
- deployment_name = THOTH_DEPLOYMENT_NAME
57
-
58
- component_name = "graph-backup-job"
59
-
60
- if deployment_name :
61
- database_schema_revision_script .labels (
62
- component_name , GraphDatabase ().get_script_alembic_version_head (), deployment_name
63
- ).inc ()
64
- else :
65
- _LOGGER .warning ("THOTH_DEPLOYMENT_NAME env variable is not set." )
66
-
67
- if pushgateway_url and deployment_name :
64
+ if THOTH_METRICS_PUSHGATEWAY_URL and THOTH_DEPLOYMENT_NAME :
68
65
try :
69
- _LOGGER .debug (f"Submitting metrics to Prometheus pushgateway { pushgateway_url } " )
66
+ _LOGGER .debug (f"Submitting metrics to Prometheus pushgateway { THOTH_METRICS_PUSHGATEWAY_URL } " )
70
67
push_to_gateway (
71
- pushgateway_url ,
72
- job = component_name ,
68
+ THOTH_METRICS_PUSHGATEWAY_URL ,
69
+ job = COMPONENT_NAME ,
73
70
registry = prometheus_registry ,
74
71
)
75
72
except Exception as e :
@@ -83,22 +80,37 @@ def main():
83
80
"""Perform graph backup job."""
84
81
_LOGGER .debug ("Debug mode is on." )
85
82
86
- _send_metrics ()
83
+ if THOTH_DEPLOYMENT_NAME :
84
+ database_schema_revision_script .labels (
85
+ COMPONENT_NAME , GraphDatabase ().get_script_alembic_version_head (), THOTH_DEPLOYMENT_NAME
86
+ ).inc ()
87
+ else :
88
+ _LOGGER .warning ("THOTH_DEPLOYMENT_NAME env variable is not set." )
87
89
88
90
adapter = GraphBackupStore ()
89
91
adapter .connect ()
90
92
91
93
_LOGGER .info ("Starting creation of the database dump" )
92
- run_command (
93
- f"pg_dump -h { KNOWLEDGE_GRAPH_HOST } -p { KNOWLEDGE_GRAPH_PORT } "
94
- f"-U { KNOWLEDGE_GRAPH_USER } -d { KNOWLEDGE_GRAPH_DATABASE } -f pg_dump.sql" ,
95
- env = {"PGPASSWORD" : os .getenv ("KNOWLEDGE_GRAPH_PASSWORD" , "postgres" )},
96
- timeout = None ,
97
- )
98
- _LOGGER .info ("Uploading the database dump" )
99
- object_id = adapter .store_dump ("pg_dump.sql" )
100
- _LOGGER .info ("The database dump is available at %s/%s" , adapter .prefix , object_id )
101
- _LOGGER .info ("Graph backup task is done." )
94
+ try :
95
+ run_command (
96
+ f"pg_dump -h { KNOWLEDGE_GRAPH_HOST } -p { KNOWLEDGE_GRAPH_PORT } "
97
+ f"-U { KNOWLEDGE_GRAPH_USER } -d { KNOWLEDGE_GRAPH_DATABASE } -f pg_dump.sql" ,
98
+ env = {"PGPASSWORD" : os .getenv ("KNOWLEDGE_GRAPH_PASSWORD" , "postgres" )},
99
+ timeout = None ,
100
+ )
101
+ _LOGGER .info ("Uploading the database dump" )
102
+
103
+ object_id = adapter .store_dump ("pg_dump.sql" )
104
+ _LOGGER .info ("The database dump is available at %s/%s" , adapter .prefix , object_id )
105
+ _LOGGER .info ("Graph backup task is done." )
106
+
107
+ _METRIC_PG_DUMP_STATUS .labels (THOTH_DEPLOYMENT_NAME , __component_version__ ).set (0 )
108
+
109
+ except Exception as e :
110
+ _METRIC_PG_DUMP_STATUS .labels (THOTH_DEPLOYMENT_NAME , __component_version__ ).set (1 )
111
+ _LOGGER .exception (f"Error saving the pg dump { e } ." )
112
+ finally :
113
+ _send_metrics ()
102
114
103
115
104
116
if __name__ == "__main__" :
0 commit comments