2 * Copyright (C) 2014 - Jonathan Rajotte <jonathan.r.julien@gmail.com>
3 * - Olivier Cotte <olivier.cotte@polymtl.ca>
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License, version 2 only, as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc., 51
16 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #include <include/config.h>
20 #include <common/config/config.h>
24 /* Strings related to command */
25 const char * const mi_lttng_element_command
= "command";
26 const char * const mi_lttng_element_command_version
= "version";
27 const char * const mi_lttng_element_command_list
= "list";
28 const char * const mi_lttng_element_command_name
= "name";
29 const char * const mi_lttng_element_command_output
= "output";
31 /* Strings related to command: version */
32 const char * const mi_lttng_element_version
= "version";
33 const char * const mi_lttng_element_version_str
= "string";
34 const char * const mi_lttng_element_version_web
= "url";
35 const char * const mi_lttng_element_version_major
= "major";
36 const char * const mi_lttng_element_version_minor
= "minor";
37 const char * const mi_lttng_element_version_license
= "license";
38 const char * const mi_lttng_element_version_patch_level
= "patchLevel";
39 const char * const mi_lttng_element_version_description
= "description";
42 struct mi_writer
*mi_lttng_writer_create(int fd_output
, int mi_output_type
)
44 struct mi_writer
*mi_writer
;
46 mi_writer
= zmalloc(sizeof(struct mi_writer
));
48 PERROR("zmalloc mi_writer_create");
51 if (mi_output_type
== LTTNG_MI_XML
) {
52 mi_writer
->writer
= config_writer_create(fd_output
);
53 if (!mi_writer
->writer
) {
56 mi_writer
->type
= LTTNG_MI_XML
;
70 int mi_lttng_writer_destroy(struct mi_writer
*writer
)
79 ret
= config_writer_destroy(writer
->writer
);
90 int mi_lttng_writer_command_open(struct mi_writer
*writer
, const char *command
)
94 ret
= mi_lttng_writer_open_element(writer
, mi_lttng_element_command
);
98 ret
= mi_lttng_writer_write_element_string(writer
,
99 mi_lttng_element_command_name
, command
);
105 int mi_lttng_writer_command_close(struct mi_writer
*writer
)
107 return mi_lttng_writer_close_element(writer
);
111 int mi_lttng_writer_open_element(struct mi_writer
*writer
,
112 const char *element_name
)
114 return config_writer_open_element(writer
->writer
, element_name
);
118 int mi_lttng_writer_close_element(struct mi_writer
*writer
)
120 return config_writer_close_element(writer
->writer
);
124 int mi_lttng_writer_write_element_unsigned_int(struct mi_writer
*writer
,
125 const char *element_name
, uint64_t value
)
127 return config_writer_write_element_unsigned_int(writer
->writer
,
128 element_name
, value
);
132 int mi_lttng_writer_write_element_signed_int(struct mi_writer
*writer
,
133 const char *element_name
, int64_t value
)
135 return config_writer_write_element_signed_int(writer
->writer
,
136 element_name
, value
);
140 int mi_lttng_writer_write_element_bool(struct mi_writer
*writer
,
141 const char *element_name
, int value
)
143 return config_writer_write_element_bool(writer
->writer
,
144 element_name
, value
);
148 int mi_lttng_writer_write_element_string(struct mi_writer
*writer
,
149 const char *element_name
, const char *value
)
151 return config_writer_write_element_string(writer
->writer
,
152 element_name
, value
);
156 int mi_lttng_version(struct mi_writer
*writer
, struct mi_lttng_version
*version
,
157 const char *lttng_description
, const char *lttng_license
)
162 ret
= mi_lttng_writer_open_element(writer
, mi_lttng_element_version
);
167 /* Version string (contain info like rc etc.) */
168 ret
= mi_lttng_writer_write_element_string(writer
,
169 mi_lttng_element_version_str
, VERSION
);
174 /* Major version number */
175 ret
= mi_lttng_writer_write_element_unsigned_int(writer
,
176 mi_lttng_element_version_major
, version
->version_major
);
181 /* Minor version number */
182 ret
= mi_lttng_writer_write_element_unsigned_int(writer
,
183 mi_lttng_element_version_minor
, version
->version_minor
);
189 ret
= mi_lttng_writer_write_element_unsigned_int(writer
,
190 mi_lttng_element_version_patch_level
, version
->version_patchlevel
);
195 /* Name of the version */
196 ret
= mi_lttng_writer_write_element_string(writer
,
197 config_element_name
, version
->version_name
);
202 /* Description mostly related to beer... */
203 ret
= mi_lttng_writer_write_element_string(writer
,
204 mi_lttng_element_version_description
, lttng_description
);
210 ret
= mi_lttng_writer_write_element_string(writer
,
211 mi_lttng_element_version_web
, version
->package_url
);
216 /* License: free as in free beer...no...*speech* */
217 ret
= mi_lttng_writer_write_element_string(writer
,
218 mi_lttng_element_version_license
, lttng_license
);
223 /* Close version element */
224 ret
= mi_lttng_writer_close_element(writer
);
231 int mi_lttng_session(struct mi_writer
*writer
,
232 struct lttng_session
*session
, int is_open
)
236 /* open sessions element */
237 ret
= mi_lttng_writer_open_element(writer
,
238 config_element_session
);
243 /* Name of the session */
244 ret
= mi_lttng_writer_write_element_string(writer
,
245 config_element_name
, session
->name
);
251 ret
= mi_lttng_writer_write_element_string(writer
,
252 config_element_path
, session
->path
);
258 ret
= mi_lttng_writer_write_element_unsigned_int(writer
,
259 config_element_enabled
, session
->enabled
);
265 ret
= mi_lttng_writer_write_element_unsigned_int(writer
,
266 config_element_snapshot_mode
, session
->snapshot_mode
);
271 /* live timer interval in usec */
272 ret
= mi_lttng_writer_write_element_unsigned_int(writer
,
273 config_element_live_timer_interval
,
274 session
->live_timer_interval
);
280 /* Closing session element */
281 ret
= mi_lttng_writer_close_element(writer
);