master
h 74 lines 1.8 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #ifndef ML_QUEUE_H
4 #define ML_QUEUE_H
5
6 #include "ml_dimension.h"
7
8 #include <atomic>
9 #include <queue>
10
11 typedef struct ml_request_create_new_model {
12 DimensionLookupInfo DLI;
13 } ml_request_create_new_model_t;
14
15 typedef struct ml_request_add_existing_model {
16 DimensionLookupInfo DLI;
17
18 ml_kmeans_inlined_t inlined_km;
19 } ml_request_add_existing_model_t;
20
21 typedef struct ml_queue_item {
22 ml_queue_item_type type;
23 ml_request_create_new_model_t create_new_model;
24 ml_request_add_existing_model add_existing_model;
25 } ml_queue_item_t;
26
27 typedef struct {
28 size_t create_new_model;
29 size_t add_exisiting_model;
30 } ml_queue_size_t;
31
32 typedef struct {
33 size_t total_create_new_model_requests_pushed;
34 size_t total_create_new_model_requests_popped;
35
36 size_t total_add_existing_model_requests_pushed;
37 size_t total_add_existing_model_requests_popped;
38
39 usec_t allotted_ut;
40 usec_t consumed_ut;
41 usec_t remaining_ut;
42
43 size_t item_result_ok;
44 size_t item_result_invalid_query_time_range;
45 size_t item_result_not_enough_collected_values;
46 size_t item_result_null_acquired_dimension;
47 size_t item_result_chart_under_replication;
48 } ml_queue_stats_t;
49
50 struct ml_queue_t {
51 std::queue<ml_request_add_existing_model_t> add_model_queue;
52 std::queue<ml_request_create_new_model_t> create_model_queue;
53 ml_queue_stats_t stats;
54
55 netdata_mutex_t mutex;
56 netdata_cond_t cond_var;
57 std::atomic<bool> exit;
58 };
59
60 ml_queue_t *ml_queue_init();
61
62 void ml_queue_destroy(ml_queue_t *q);
63
64 void ml_queue_push(ml_queue_t *q, const ml_queue_item_t req);
65
66 ml_queue_item_t ml_queue_pop(ml_queue_t *q);
67
68 ml_queue_size_t ml_queue_size(ml_queue_t *q);
69
70 ml_queue_stats_t ml_queue_stats(ml_queue_t *q);
71
72 void ml_queue_signal(ml_queue_t *q);
73
74 #endif /* ML_QUEUE_H */