LCOV - code coverage report
Current view: top level - common - alerts.c (source / functions) Hit Total Coverage
Test: Pacemaker code coverage Lines: 0 41 0.0 %
Date: 2024-05-07 11:09:47 Functions: 0 5 0.0 %

          Line data    Source code
       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>
      14             : #include <crm/common/alerts_internal.h>
      15             : #include <crm/common/cib_internal.h>
      16             : #include <crm/common/xml_internal.h>
      17             : 
      18             : /*
      19             :  * to allow script compatibility we can have more than one
      20             :  * set of environment variables
      21             :  */
      22             : const char *pcmk__alert_keys[PCMK__ALERT_INTERNAL_KEY_MAX][3] =
      23             : {
      24             :     [PCMK__alert_key_recipient] = {
      25             :         "CRM_notify_recipient",         "CRM_alert_recipient",          NULL
      26             :     },
      27             :     [PCMK__alert_key_node] = {
      28             :         "CRM_notify_node",              "CRM_alert_node",               NULL
      29             :     },
      30             :     [PCMK__alert_key_nodeid] = {
      31             :         "CRM_notify_nodeid",            "CRM_alert_nodeid",             NULL
      32             :     },
      33             :     [PCMK__alert_key_rsc] = {
      34             :         "CRM_notify_rsc",               "CRM_alert_rsc",                NULL
      35             :     },
      36             :     [PCMK__alert_key_task] = {
      37             :         "CRM_notify_task",              "CRM_alert_task",               NULL
      38             :     },
      39             :     [PCMK__alert_key_interval] = {
      40             :         "CRM_notify_interval",          "CRM_alert_interval",           NULL
      41             :     },
      42             :     [PCMK__alert_key_desc] = {
      43             :         "CRM_notify_desc",              "CRM_alert_desc",               NULL
      44             :     },
      45             :     [PCMK__alert_key_status] = {
      46             :         "CRM_notify_status",            "CRM_alert_status",             NULL
      47             :     },
      48             :     [PCMK__alert_key_target_rc] = {
      49             :         "CRM_notify_target_rc",         "CRM_alert_target_rc",          NULL
      50             :     },
      51             :     [PCMK__alert_key_rc] = {
      52             :         "CRM_notify_rc",                "CRM_alert_rc",                 NULL
      53             :     },
      54             :     [PCMK__alert_key_kind] = {
      55             :         "CRM_notify_kind",              "CRM_alert_kind",               NULL
      56             :     },
      57             :     [PCMK__alert_key_version] = {
      58             :         "CRM_notify_version",           "CRM_alert_version",            NULL
      59             :     },
      60             :     [PCMK__alert_key_node_sequence] = {
      61             :         "CRM_notify_node_sequence",     PCMK__ALERT_NODE_SEQUENCE,      NULL
      62             :     },
      63             :     [PCMK__alert_key_timestamp] = {
      64             :         "CRM_notify_timestamp",         "CRM_alert_timestamp",          NULL
      65             :     },
      66             :     [PCMK__alert_key_attribute_name] = {
      67             :         "CRM_notify_attribute_name",    "CRM_alert_attribute_name",     NULL
      68             :     },
      69             :     [PCMK__alert_key_attribute_value] = {
      70             :         "CRM_notify_attribute_value",   "CRM_alert_attribute_value",    NULL
      71             :     },
      72             :     [PCMK__alert_key_timestamp_epoch] = {
      73             :         "CRM_notify_timestamp_epoch",   "CRM_alert_timestamp_epoch",    NULL
      74             :     },
      75             :     [PCMK__alert_key_timestamp_usec] = {
      76             :         "CRM_notify_timestamp_usec",    "CRM_alert_timestamp_usec",     NULL
      77             :     },
      78             :     [PCMK__alert_key_exec_time] = {
      79             :         "CRM_notify_exec_time",         "CRM_alert_exec_time",          NULL
      80             :     }
      81             : };
      82             : 
      83             : /*!
      84             :  * \brief Create a new alert entry structure
      85             :  *
      86             :  * \param[in] id  ID to use
      87             :  * \param[in] path  Path to alert agent executable
      88             :  *
      89             :  * \return Pointer to newly allocated alert entry
      90             :  * \note Non-string fields will be filled in with defaults.
      91             :  *       It is the caller's responsibility to free the result,
      92             :  *       using pcmk__free_alert().
      93             :  */
      94             : pcmk__alert_t *
      95           0 : pcmk__alert_new(const char *id, const char *path)
      96             : {
      97           0 :     pcmk__alert_t *entry = pcmk__assert_alloc(1, sizeof(pcmk__alert_t));
      98             : 
      99           0 :     CRM_ASSERT((id != NULL) && (path != NULL));
     100           0 :     entry->id = pcmk__str_copy(id);
     101           0 :     entry->path = pcmk__str_copy(path);
     102           0 :     entry->timeout = PCMK__ALERT_DEFAULT_TIMEOUT_MS;
     103           0 :     entry->flags = pcmk__alert_default;
     104           0 :     return entry;
     105             : }
     106             : 
     107             : void
     108           0 : pcmk__free_alert(pcmk__alert_t *entry)
     109             : {
     110           0 :     if (entry) {
     111           0 :         free(entry->id);
     112           0 :         free(entry->path);
     113           0 :         free(entry->tstamp_format);
     114           0 :         free(entry->recipient);
     115             : 
     116           0 :         g_strfreev(entry->select_attribute_name);
     117           0 :         if (entry->envvars) {
     118           0 :             g_hash_table_destroy(entry->envvars);
     119             :         }
     120           0 :         free(entry);
     121             :     }
     122           0 : }
     123             : 
     124             : /*!
     125             :  * \internal
     126             :  * \brief Duplicate an alert entry
     127             :  *
     128             :  * \param[in] entry  Alert entry to duplicate
     129             :  *
     130             :  * \return Duplicate of alert entry
     131             :  */
     132             : pcmk__alert_t *
     133           0 : pcmk__dup_alert(const pcmk__alert_t *entry)
     134             : {
     135           0 :     pcmk__alert_t *new_entry = pcmk__alert_new(entry->id, entry->path);
     136             : 
     137           0 :     new_entry->timeout = entry->timeout;
     138           0 :     new_entry->flags = entry->flags;
     139           0 :     new_entry->envvars = pcmk__str_table_dup(entry->envvars);
     140           0 :     new_entry->tstamp_format = pcmk__str_copy(entry->tstamp_format);
     141           0 :     new_entry->recipient = pcmk__str_copy(entry->recipient);
     142           0 :     if (entry->select_attribute_name) {
     143           0 :         new_entry->select_attribute_name = g_strdupv(entry->select_attribute_name);
     144             :     }
     145           0 :     return new_entry;
     146             : }
     147             : 
     148             : void
     149           0 : pcmk__add_alert_key(GHashTable *table, enum pcmk__alert_keys_e name,
     150             :                     const char *value)
     151             : {
     152           0 :     for (const char **key = pcmk__alert_keys[name]; *key; key++) {
     153           0 :         crm_trace("Inserting alert key %s = '%s'", *key, value);
     154           0 :         if (value) {
     155           0 :             pcmk__insert_dup(table, *key, value);
     156             :         } else {
     157           0 :             g_hash_table_remove(table, *key);
     158             :         }
     159             :     }
     160           0 : }
     161             : 
     162             : void
     163           0 : pcmk__add_alert_key_int(GHashTable *table, enum pcmk__alert_keys_e name,
     164             :                         int value)
     165             : {
     166           0 :     for (const char **key = pcmk__alert_keys[name]; *key; key++) {
     167           0 :         crm_trace("Inserting alert key %s = %d", *key, value);
     168           0 :         g_hash_table_insert(table, pcmk__str_copy(*key), pcmk__itoa(value));
     169             :     }
     170           0 : }

Generated by: LCOV version 1.14