blob: 2928c268920d46f5eb00610290cd89d585e6dfa4 [file] [log] [blame]
Harout Hedeshian6202ba72015-04-13 19:02:25 -06001/************************************************************************
2Copyright (c) 2015, The Linux Foundation. All rights reserved.
3
4Redistribution and use in source and binary forms, with or without
5modification, are permitted provided that the following conditions are
6met:
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above
10 copyright notice, this list of conditions and the following
11 disclaimer in the documentation and/or other materials provided
12 with the distribution.
13 * Neither the name of The Linux Foundation nor the names of its
14 contributors may be used to endorse or promote products derived
15 from this software without specific prior written permission.
16
17THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28************************************************************************/
29
30/**
31 * @file datatop_interface.h
32 * @brief Declares functions held within datatop.c and datatop_helpers.c
33 *
34 * Declares functions which are held within datatop.c and datatop_helpers.c.
35 * Also defines data structures used for storing data gathered during polling
36 * such as datapoint names, values, and prefixes along with other valuable
37 * information.
38 */
39
40#ifndef DATATOP_INTERFACE_H
41#define DATATOP_INTERFACE_H
42
43#include <inttypes.h>
44#include "datatop_linked_list.h"
45
46#define DTOP_ULONG 0
47#define DTOP_LONG 1
48#define DTOP_UINT 2
49#define DTOP_INT 3
50#define DTOP_UCHAR 4
51#define DTOP_CHAR 5
52#define DTOP_STR 6
53
54#define FILE_ERROR -1
55#define FILE_SUCCESS 0
56#define SKIP 1
57#define DO_NOT_SKIP 0
58#define POPULATED 1
59#define NOT_POPULATED 0
60
61#define DTOP_POLL_OK 0
62#define DTOP_POLL_IO_ERR 1
63#define NOT_CHECKED 0
64
65#define QUIT 1
66
67#define DTOP_DP_MAX_STR_LEN 32
68
69#define DTOP_DP_HFILL .initial_data_populated = NOT_POPULATED, \
70 .skip = 0
71
72/**
73 * @struct dtop_data_union
74 * @brief Provides the type for dp value.
75 */
76union dtop_data_union {
77 uint64_t d_ulong;
78 int64_t d_long;
79 uint32_t d_uint;
80 int32_t d_int;
81 uint8_t d_uchar;
82 int8_t d_char;
83 char d_str[DTOP_DP_MAX_STR_LEN];
84};
85
86/**
87 * @struct dtop_data_point
88 * @brief Individual datapoint in a file.
89 *
90 * @var dtop_data_point::name
91 * Stores the datapoints name.
92 * @var dtop_data_point::prefix
93 * Stores the individual prefix for the dp.
94 * @var dtop_data_point::type
95 * Type dp value is, see definitions.
96 * @var dtop_data_point::initial_data
97 * Holds the initial value of the dp the first time it was polled.
98 * @var dtop_data_point::initial_data_populated
99 * Variable that is changed when initial_data is populated.
100 * @var dtop_data_point::data
101 * Value of the dp at the most recent poll.
102 */
103struct dtop_data_point {
104 char *name;
105 char *prefix;
106
107 /* Results of polling */
108 char type;
109 union dtop_data_union initial_data;
110 char initial_data_populated;
111 union dtop_data_union data;
112
113 /* Skip on subsequent polls */
114 char skip;
115};
116
117/**
118 * @struct dtop_data_point_gatherer
119 * @brief Struct used to hold data about a set of collected data.
120 *
121 * @var dtop_data_point_gatherer::prefix
122 * Name of directory which data is collected from.
123 * @var dtop_data_point_gatherer::file
124 * File path that data is collected from.
125 * @var dtop_data_point_gatherer::poll
126 * Poll function takes a dtop_data_point_gatherer as parameter.
127 * int equals, DTOP_POLL_IO_ERR - Poll of dpg unsuccessful, or
128 * DTOP_POLL_OK - Poll of dpg successful.
129 * @var dtop_data_point_gatherer::data_points
130 * Pointer to a dtop_data_point struct (dp).
131 * @var dtop_data_point_gatherer::data_points_len
132 * Number of elements in the array of dp's the dpg accesses.
133 */
134struct dtop_data_point_gatherer {
135 char *prefix;
136 char *file;
137 int (*poll)(struct dtop_data_point_gatherer *dpg);
138 void (*deconstruct)(struct dtop_data_point_gatherer *dpg);
139
140 struct dtop_data_point *data_points;
141 int data_points_len;
142
143 /* Private data */
144 void *priv;
145};
146
147void dtop_register(struct dtop_data_point_gatherer *dpg);
148void dtop_store_dp(struct dtop_data_point *dp, const char *str);
149void dtop_print_dpg(struct dtop_data_point_gatherer *dpg);
150void get_snapshot_diff(struct dtop_linked_list *dpg_list);
151void dtop_print_snapshot_diff(struct dtop_linked_list *dpg_list);
152void dtop_poll(struct dtop_linked_list *dpg_list);
153int dtop_print_time_at_poll(FILE *fw);
154int dtop_print_dpg_names_csv(struct dtop_data_point_gatherer *dpg, FILE *fw);
155int dtop_write_pollingdata_csv(struct dtop_linked_list *dpg_list, FILE *fw);
156void dtop_reset_dp_initial_values(struct dtop_linked_list *dpg_list);
157void deconstruct_dpgs(struct dtop_linked_list *dpg_list);
158int dtop_print_system_snapshot(char *file);
Harout Hedeshiane21de8d2015-05-20 12:06:46 -0600159
160
161#ifndef HAVE_STRL_FUNCTIONS
162#define strlcpy(X,Y,Z) strcpy(X,Y)
163#define strlcat(X,Y,Z) strcat(X,Y)
164#endif /* HAVE_STRL_FUNCTIONS */
165
Harout Hedeshian6202ba72015-04-13 19:02:25 -0600166#endif /* DATATOP_INTERFACE_H */