pacemaker  3.0.0-d8340737c4
Scalable High-Availability cluster resource manager
alerts.c
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2024 the Pacemaker project contributors
3  *
4  * The version control history for this file may have further details.
5  *
6  * This source code is licensed under the GNU Lesser General Public License
7  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8  */
9 
10 #include <crm_internal.h>
11 #include <crm/crm.h>
12 #include <crm/lrmd.h>
13 #include <crm/common/xml.h>
17 
19  [PCMK__alert_key_recipient] = "CRM_alert_recipient",
20  [PCMK__alert_key_node] = "CRM_alert_node",
21  [PCMK__alert_key_nodeid] = "CRM_alert_nodeid",
22  [PCMK__alert_key_rsc] = "CRM_alert_rsc",
23  [PCMK__alert_key_task] = "CRM_alert_task",
24  [PCMK__alert_key_interval] = "CRM_alert_interval",
25  [PCMK__alert_key_desc] = "CRM_alert_desc",
26  [PCMK__alert_key_status] = "CRM_alert_status",
27  [PCMK__alert_key_target_rc] = "CRM_alert_target_rc",
28  [PCMK__alert_key_rc] = "CRM_alert_rc",
29  [PCMK__alert_key_kind] = "CRM_alert_kind",
30  [PCMK__alert_key_version] = "CRM_alert_version",
32  [PCMK__alert_key_timestamp] = "CRM_alert_timestamp",
33  [PCMK__alert_key_attribute_name] = "CRM_alert_attribute_name",
34  [PCMK__alert_key_attribute_value] = "CRM_alert_attribute_value",
35  [PCMK__alert_key_timestamp_epoch] = "CRM_alert_timestamp_epoch",
36  [PCMK__alert_key_timestamp_usec] = "CRM_alert_timestamp_usec",
37  [PCMK__alert_key_exec_time] = "CRM_alert_exec_time",
38 };
39 
52 pcmk__alert_new(const char *id, const char *path)
53 {
54  pcmk__alert_t *entry = pcmk__assert_alloc(1, sizeof(pcmk__alert_t));
55 
56  pcmk__assert((id != NULL) && (path != NULL));
57  entry->id = pcmk__str_copy(id);
58  entry->path = pcmk__str_copy(path);
60  entry->flags = pcmk__alert_default;
61  return entry;
62 }
63 
64 void
66 {
67  if (entry) {
68  free(entry->id);
69  free(entry->path);
70  free(entry->tstamp_format);
71  free(entry->recipient);
72 
73  g_strfreev(entry->select_attribute_name);
74  if (entry->envvars) {
75  g_hash_table_destroy(entry->envvars);
76  }
77  free(entry);
78  }
79 }
80 
91 {
92  pcmk__alert_t *new_entry = pcmk__alert_new(entry->id, entry->path);
93 
94  new_entry->timeout = entry->timeout;
95  new_entry->flags = entry->flags;
96  new_entry->envvars = pcmk__str_table_dup(entry->envvars);
97  new_entry->tstamp_format = pcmk__str_copy(entry->tstamp_format);
98  new_entry->recipient = pcmk__str_copy(entry->recipient);
99  if (entry->select_attribute_name) {
100  new_entry->select_attribute_name = g_strdupv(entry->select_attribute_name);
101  }
102  return new_entry;
103 }
104 
105 void
107  const char *value)
108 {
109  pcmk__assert((table != NULL) && (name >= 0)
111  if (value == NULL) {
112  crm_trace("Removing alert key %s", pcmk__alert_keys[name]);
113  g_hash_table_remove(table, pcmk__alert_keys[name]);
114  } else {
115  crm_trace("Inserting alert key %s = '%s'",
116  pcmk__alert_keys[name], value);
117  pcmk__insert_dup(table, pcmk__alert_keys[name], value);
118  }
119 }
120 
121 void
123  int value)
124 {
125  pcmk__assert((table != NULL) && (name >= 0)
127  crm_trace("Inserting alert key %s = %d", pcmk__alert_keys[name], value);
128  g_hash_table_insert(table, pcmk__str_copy(pcmk__alert_keys[name]),
129  pcmk__itoa(value));
130 }
A dumping ground.
void pcmk__free_alert(pcmk__alert_t *entry)
Definition: alerts.c:65
const char * name
Definition: cib.c:26
#define PCMK__ALERT_INTERNAL_KEY_MAX
char ** select_attribute_name
char * tstamp_format
Resource agent executor.
#define PCMK__ALERT_NODE_SEQUENCE
pcmk__alert_keys_e
void pcmk__add_alert_key(GHashTable *table, enum pcmk__alert_keys_e name, const char *value)
Definition: alerts.c:106
#define crm_trace(fmt, args...)
Definition: logging.h:372
Wrappers for and extensions to libxml2.
void pcmk__add_alert_key_int(GHashTable *table, enum pcmk__alert_keys_e name, int value)
Definition: alerts.c:122
GHashTable * envvars
#define pcmk__str_copy(str)
#define pcmk__assert(expr)
const char * path
Definition: cib.c:28
GHashTable * pcmk__str_table_dup(GHashTable *old_table)
Definition: strings.c:768
const char * pcmk__alert_keys[PCMK__ALERT_INTERNAL_KEY_MAX]
Definition: alerts.c:18
pcmk__alert_t * pcmk__dup_alert(const pcmk__alert_t *entry)
Definition: alerts.c:90
#define pcmk__assert_alloc(nmemb, size)
Definition: internal.h:257
pcmk__alert_t * pcmk__alert_new(const char *id, const char *path)
Create a new alert entry structure.
Definition: alerts.c:52
#define PCMK__ALERT_DEFAULT_TIMEOUT_MS
void pcmk__insert_dup(GHashTable *table, const char *name, const char *value)
Definition: strings.c:703