1 /**
2  * collectd - src/utils_format_stackdriver.h
3  * ISC license
4  *
5  * Copyright (C) 2017  Florian Forster
6  *
7  * Permission to use, copy, modify, and/or distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  *
19  * Authors:
20  *   Florian Forster <octo at collectd.org>
21  **/
22 
23 #ifndef UTILS_FORMAT_STACKDRIVER_H
24 #define UTILS_FORMAT_STACKDRIVER_H 1
25 
26 #include "collectd.h"
27 #include "plugin.h"
28 
29 /* sd_output_t is a buffer to which value_list_t* can be added and from which
30  * an appropriately formatted char* can be read. */
31 struct sd_output_s;
32 typedef struct sd_output_s sd_output_t;
33 
34 /* sd_resource_t represents a MonitoredResource. */
35 struct sd_resource_s;
36 typedef struct sd_resource_s sd_resource_t;
37 
38 sd_output_t *sd_output_create(sd_resource_t *res);
39 
40 /* sd_output_destroy frees all memory used by out, including the
41  * sd_resource_t* passed to sd_output_create. */
42 void sd_output_destroy(sd_output_t *out);
43 
44 /* sd_output_add adds a value_list_t* to "out".
45  *
46  * Return values:
47  *   - 0        Success
48  *   - ENOBUFS  Success, but the buffer should be flushed soon.
49  *   - EEXIST   The value list is already encoded in the buffer.
50  *              Flush the buffer, then call sd_output_add again.
51  *   - ENOENT   First time we encounter this metric. Create a metric descriptor
52  *              using the Stackdriver API and then call
53  *              sd_output_register_metric.
54  */
55 int sd_output_add(sd_output_t *out, data_set_t const *ds,
56                   value_list_t const *vl);
57 
58 /* sd_output_register_metric adds the metric descriptor which vl maps to, to
59  * the list of known metric descriptors. */
60 int sd_output_register_metric(sd_output_t *out, data_set_t const *ds,
61                               value_list_t const *vl);
62 
63 /* sd_output_reset resets the output and returns the previous content of the
64  * buffer. It is the caller's responsibility to call free() with the returned
65  * pointer. */
66 char *sd_output_reset(sd_output_t *out);
67 
68 sd_resource_t *sd_resource_create(char const *type);
69 void sd_resource_destroy(sd_resource_t *res);
70 int sd_resource_add_label(sd_resource_t *res, char const *key,
71                           char const *value);
72 
73 /* sd_format_metric_descriptor creates the payload for a
74  * projects.metricDescriptors.create() request. */
75 int sd_format_metric_descriptor(char *buffer, size_t buffer_size,
76                                 data_set_t const *ds, value_list_t const *vl,
77                                 int ds_index);
78 
79 #endif /* UTILS_FORMAT_STACKDRIVER_H */
80