Compare commits

..
Author SHA1 Message Date
Alex Jaramillo 98b36d5609 Release v1.16.2
This realease contains changes to add source file references as a
workaround for failing libcheck tests. This changes allows telemetry
client to be built using gcc8. This has to be fixed properly in the
future.

Signed-off-by: Alex Jaramillo <alex.v.jaramillo@intel.com>
2018-07-27 14:19:11 -07:00
Alex Jaramillo e59b75689e Release v1.16.1
This release contains:

* Fix for failing unit tests during build when the system where the
package is being built has a telemetry client running.

* Added documentation to probes.

* Documenting local debugging features.

Signed-off-by: Alex Jaramillo <alex.v.jaramillo@intel.com>
2018-05-14 14:39:30 +00:00
Alex Jaramillo e301dad48e Fix for journal tmp directory
This change fixes a bug where journal unit tests fail if the system
where the code is build has telemetry running.

Signed-off-by: Alex Jaramillo <alex.v.jaramillo@intel.com>
2018-05-14 07:22:39 -07:00
Alex Jaramillo 16d8abae81 Bumping libcheck version to 0.12
Bumping libcheck version to 0.12 this version provides additional assertions.

Signed-off-by: Alex Jaramillo <alex.v.jaramillo@intel.com>
2018-05-14 07:22:39 -07:00
avjarami 4aa1f9f3c4 Adding documentation for probes
Including description of collected metadata and specific information
about what data is collected by default probes that are provided by
telemetry client.

Signed-off-by: avjarami <alex.v.jaramillo@intel.com>
2018-04-11 09:19:41 -07:00
avjarami af35ee3a9d Docs for new features
* Added brief description of new configuration values.
* Documenting new header.
* Describing use of features for local debug.

Signed-off-by: avjarami <alex.v.jaramillo@intel.com>
2018-04-10 21:22:22 -07:00
6 changed files with 116 additions and 12 deletions
+40 -1
View File
@@ -6,7 +6,7 @@ solution for Linux-based operating systems. Specifically, the front end
component includes:
- telemetrics probes that collect specific types of data from the operating
system.
system. For more info on probes go [here](./src/probes).
- a library, libtelemetry, that telemetrics probes use to create telemetrics
records and send them to the daemon for further processing.
@@ -178,6 +178,45 @@ The daemon uses the following configuration options from the configuration file:
telemetry records locally only.
Data reported
---------------------
The data reported by the telemetry client could be understood as two main sets:
metadata and a payload.
The metadata is used to report details of a machine's architecture. The
following are the metadata values currently collected (Record Format Version 4):
* record_format_version: version of the record, currently is 'Version 4'. This
value changes when new metadata is added.
* classification: this field is used to identify the type of record sent by a
specific client probe; classifications use the format DOMAIN/PROBE/REST, where
DOMAIN is the vendor of the probe, PROBE is the probe name, and REST is a
probe-defined field to classify what is contained in the payload.
* severity: this is an integer value between 1 and 4 where 1 is "low" and 4 is
"critical"
* machine_id: a machine identifier that is rotate every 3 days for privacy reasons.
* creation_timestamp: timestamp when the record was collected.
* arch: a string describing machine architecture i.e. 'x86_64'.
* host_type: a string with the combination of 'System Vendor', 'Product Name', and
'Product Version' read from dmi file system.
* build: OS build number.
* kernel_version: Kernel version.
* payload_format_version: version of the payload, currently is 'Version 1'.
* system_name: the value after 'ID=' from '/etc/os-release' (or distribution
provided folder)
* board_name: a string read from dmi file system that combines 'Board Name' and
'Board Vendor'.
* cpu_model: cpu model name extracted from '/proc/cpuinfo'.
* bios_version: BIOS version.
* event_id: an id to group multiple records if these were generated by a single
event occurrence.
The payload as mentioned above is reported by probes. The telemetry library adds
the metadata to the payload (done programatically when using library API) for
more information about probes go [here](./src/probes).
Machine id
---------------------
+2 -2
View File
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([telemetrics-client], [1.16.0], [https://clearlinux.org/])
AC_INIT([telemetrics-client], [1.16.2], [https://clearlinux.org/])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.14 -Wall -Werror -Wno-extra-portability foreign subdir-objects])
AM_SILENT_RULES([yes])
@@ -23,7 +23,7 @@ AC_PROG_MAKE_SET
# Checks for libraries.
# check >= 0.9.12 is required for TAP output
PKG_CHECK_MODULES([CHECK], [check >= 0.9.12])
PKG_CHECK_MODULES([CHECK], [check >= 0.12])
PKG_CHECK_MODULES([CURL], [libcurl])
AC_CHECK_LIB([elf], [elf_begin], [have_elflib=yes], [AC_MSG_ERROR([Unable to find libelf from elfutils])])
AC_CHECK_LIB([dw], [dwfl_begin], [have_dwlib=yes], [AC_MSG_ERROR([Unable to find libdw from elfutils])])
+5 -3
View File
@@ -344,9 +344,11 @@ TelemJournal *open_journal(const char *journal_file)
struct TelemJournal *telem_journal;
// Use default location if journal_file parameter is NULL
fptr = (journal_file == NULL) ? fopen(JOURNAL_PATH, "a+") :
fopen(journal_file, "a+");
if (journal_file == NULL) {
fptr = fopen(JOURNAL_PATH, "a+");
} else {
fptr = fopen(journal_file, "a+");
}
if (fptr == NULL) {
#ifdef DEBUG
perror("Error while opening journal file: ");
+53
View File
@@ -0,0 +1,53 @@
# Probes
The default probes provided along the telemetry client code are:
* bertprobe: this probe reports on the Boot Error Region Table if such
entry is found in ```/sys/firmware/acpi/tables/BERT```.
* crashprobe: This probe processes core dump files. It can be registered as
the kernel core file handler in /proc/sys/kernel/core_pattern.
* hprobe: a simple probe that sends a keep alive message. This probe can also
be useful for testing
* journalprobe: a probe that monitors the systemd journal for log messages
from failed services.
* oopsprobe: a probe to collect 'oops messages' when the kernel detects a
problem.
* pstoreprobe: probe to collect messages left on pstore filesystem.
* telem-record-gen: this is a "general-purpose probe" for sending custom
records on-the-fly. This tool can be used stand alone or as a part of a
script to implement a probe.
For example to generate an hprobe like message we can execute the following
command:
```
$ telem-record-gen --class org.example/hello/world --payload hello
```
for more options use the ```--help``` switch i.e.:
```
$ telem-record-gen --help
Usage:
telem-record-gen [OPTIONS] - create and send a custom telemetry record
Help Options:
-h, --help Show help options
Application Options:
-f, --config-file Path to configuration file (not implemented yet)
-V, --version Print the program version
-s, --severity Severity level (1-4) - (default 1)
-c, --class Classification level_1/level_2/level_3
-p, --payload Record body (max size = 8k)
-P, --payload-file File to read payload from
-R, --record-version Version number for format of payload (default 1)
-e, --event-id Event id to use in the record
```
+12 -4
View File
@@ -20,11 +20,16 @@
#include "common.h"
#include "journal/journal.h"
static char *journal_file = "journal.txt";
static char *journal_print_file = "journal.print.txt";
static struct TelemJournal *journal = NULL;
static char *journal_file = TESTOOPSDIR "/journal.txt";
static char *eid = "00007766547776eb7fc478eb0eb43e43";
static int K = 20;
void teardown(void) {
remove(journal_file);
}
START_TEST(check_open_journal)
{
struct TelemJournal *j = open_journal(journal_file);
@@ -108,6 +113,7 @@ void new_entry_teardown(void)
close_journal(journal);
journal = NULL;
}
remove(journal_file);
}
void insert_n_records(int n, struct TelemJournal *j)
@@ -128,7 +134,7 @@ START_TEST(check_journal_file_prune)
insert_n_records(j->record_count_limit * 2, j);
ck_assert_int_gt(j->record_count, j->record_count_limit);
rc = prune_journal(j, TESTOOPSDIR);
rc = prune_journal(j, "./");
ck_assert(rc == 0);
// Record count should always be below the limit + hysteresis
ck_assert_int_lt(j->record_count, j->record_count_limit + DEVIATION);
@@ -139,13 +145,12 @@ END_TEST
void journal_entry_setup(void)
{
int result = 0;
const char *journal_print = TESTOOPSDIR "/journal.print.txt";
if (journal) {
close_journal(journal);
}
journal = open_journal(journal_print);
journal = open_journal(journal_print_file);
insert_n_records(K, journal);
/* Insert recors with specific values */
@@ -188,6 +193,7 @@ END_TEST
void journal_entry_teardown(void)
{
close_journal(journal);
remove(journal_print_file);
}
Suite *config_suite(void)
@@ -197,6 +203,7 @@ Suite *config_suite(void)
// Individual unit tests are added to "test cases"
TCase *t = tcase_create("journal");
tcase_add_unchecked_fixture(t, NULL, teardown);
tcase_add_test(t, check_open_journal);
tcase_add_test(t, check_unsuccessful_open_journal);
suite_add_tcase(s, t);
@@ -211,6 +218,7 @@ Suite *config_suite(void)
suite_add_tcase(s, t);
t = tcase_create("prunning journal");
tcase_add_unchecked_fixture(t, NULL, teardown);
tcase_add_test(t, check_journal_file_prune);
suite_add_tcase(s, t);
+4 -2
View File
@@ -131,7 +131,6 @@ EXTRA_DIST += \
%C%_check_journal_SOURCES = \
%D%/check_journal.c \
src/journal/journal.h \
src/journal/journal.c \
src/util.h \
src/util.c
@@ -145,7 +144,10 @@ EXTRA_DIST += \
%C%_check_libtelemetry_SOURCES = \
%D%/check_libtelemetry.c \
src/telemetry.c
src/configuration.h \
src/util.h \
src/nica/hashmap.h \
src/nica/inifile.h
%C%_check_libtelemetry_CFLAGS = \
$(AM_CFLAGS) \