@@ -1067,7 +1067,7 @@ static inline void facets_key_value_transformed(FACETS *facets, FACET_KEY *k, FA
10671067 buffer_strcat (dst , facets_key_value_cached (k , v , facets -> report .used_hashes_registry ));
10681068}
10691069
1070- static inline void facets_histogram_value_names (BUFFER * wb , FACETS * facets __maybe_unused , FACET_KEY * k , const char * key , const char * first_key ) {
1070+ static inline void facets_histogram_value_ids (BUFFER * wb , FACETS * facets __maybe_unused , FACET_KEY * k , const char * key , const char * first_key ) {
10711071 CLEAN_BUFFER * tb = buffer_create (0 , NULL );
10721072
10731073 buffer_json_member_add_array (wb , key );
@@ -1078,9 +1078,25 @@ static inline void facets_histogram_value_names(BUFFER *wb, FACETS *facets __may
10781078 if (k && k -> values .enabled ) {
10791079 FACET_VALUE * v ;
10801080 foreach_value_in_key (k , v ) {
1081- if (unlikely (!v -> histogram ))
1082- continue ;
1081+ buffer_json_add_array_item_string (wb , facets_key_value_id (k ,v ));
1082+ }
1083+ foreach_value_in_key_done (v );
1084+ }
1085+ }
1086+ buffer_json_array_close (wb ); // key
1087+ }
1088+
1089+ static inline void facets_histogram_value_names (BUFFER * wb , FACETS * facets __maybe_unused , FACET_KEY * k , const char * key , const char * first_key ) {
1090+ CLEAN_BUFFER * tb = buffer_create (0 , NULL );
10831091
1092+ buffer_json_member_add_array (wb , key );
1093+ {
1094+ if (first_key )
1095+ buffer_json_add_array_item_string (wb , first_key );
1096+
1097+ if (k && k -> values .enabled ) {
1098+ FACET_VALUE * v ;
1099+ foreach_value_in_key (k , v ) {
10841100 facets_key_value_transformed (facets , k , v , tb , FACETS_TRANSFORM_HISTOGRAM );
10851101 buffer_json_add_array_item_string (wb , buffer_tostring (tb ));
10861102 }
@@ -1096,9 +1112,6 @@ static inline void facets_histogram_value_colors(BUFFER *wb, FACETS *facets __ma
10961112 if (k && k -> values .enabled ) {
10971113 FACET_VALUE * v ;
10981114 foreach_value_in_key (k , v ) {
1099- if (unlikely (!v -> histogram ))
1100- continue ;
1101-
11021115 buffer_json_add_array_item_string (wb , v -> color );
11031116 }
11041117 foreach_value_in_key_done (v );
@@ -1113,9 +1126,6 @@ static inline void facets_histogram_value_units(BUFFER *wb, FACETS *facets __may
11131126 if (k && k -> values .enabled ) {
11141127 FACET_VALUE * v ;
11151128 foreach_value_in_key (k , v ) {
1116- if (unlikely (!v -> histogram ))
1117- continue ;
1118-
11191129 buffer_json_add_array_item_string (wb , "events" );
11201130 }
11211131 foreach_value_in_key_done (v );
@@ -1130,9 +1140,6 @@ static inline void facets_histogram_value_min(BUFFER *wb, FACETS *facets __maybe
11301140 if (k && k -> values .enabled ) {
11311141 FACET_VALUE * v ;
11321142 foreach_value_in_key (k , v ) {
1133- if (unlikely (!v -> histogram ))
1134- continue ;
1135-
11361143 buffer_json_add_array_item_uint64 (wb , v -> min );
11371144 }
11381145 foreach_value_in_key_done (v );
@@ -1147,9 +1154,6 @@ static inline void facets_histogram_value_max(BUFFER *wb, FACETS *facets __maybe
11471154 if (k && k -> values .enabled ) {
11481155 FACET_VALUE * v ;
11491156 foreach_value_in_key (k , v ) {
1150- if (unlikely (!v -> histogram ))
1151- continue ;
1152-
11531157 buffer_json_add_array_item_uint64 (wb , v -> max );
11541158 }
11551159 foreach_value_in_key_done (v );
@@ -1164,9 +1168,6 @@ static inline void facets_histogram_value_avg(BUFFER *wb, FACETS *facets __maybe
11641168 if (k && k -> values .enabled ) {
11651169 FACET_VALUE * v ;
11661170 foreach_value_in_key (k , v ) {
1167- if (unlikely (!v -> histogram ))
1168- continue ;
1169-
11701171 buffer_json_add_array_item_double (wb , (double ) v -> sum / (double ) facets -> histogram .slots );
11711172 }
11721173 foreach_value_in_key_done (v );
@@ -1181,9 +1182,6 @@ static inline void facets_histogram_value_arp(BUFFER *wb, FACETS *facets __maybe
11811182 if (k && k -> values .enabled ) {
11821183 FACET_VALUE * v ;
11831184 foreach_value_in_key (k , v ) {
1184- if (unlikely (!v -> histogram ))
1185- continue ;
1186-
11871185 buffer_json_add_array_item_uint64 (wb , 0 );
11881186 }
11891187 foreach_value_in_key_done (v );
@@ -1198,10 +1196,10 @@ static inline void facets_histogram_value_con(BUFFER *wb, FACETS *facets __maybe
11981196 if (k && k -> values .enabled ) {
11991197 FACET_VALUE * v ;
12001198 foreach_value_in_key (k , v ) {
1201- if ( unlikely (! v -> histogram ) )
1202- continue ;
1203-
1204- buffer_json_add_array_item_double (wb , ( double ) v -> sum * 100.0 / ( double ) sum );
1199+ if ( sum )
1200+ buffer_json_add_array_item_double ( wb , ( double ) v -> sum * 100.0 / ( double ) sum ) ;
1201+ else
1202+ buffer_json_add_array_item_double (wb , 0.0 );
12051203 }
12061204 foreach_value_in_key_done (v );
12071205 }
@@ -1218,8 +1216,10 @@ static void facets_histogram_generate(FACETS *facets, FACET_KEY *k, BUFFER *wb)
12181216 if (k && k -> values .enabled ) {
12191217 FACET_VALUE * v ;
12201218 foreach_value_in_key (k , v ) {
1221- if (unlikely (!v -> histogram ))
1219+ if (unlikely (!v -> histogram )) {
1220+ v -> min = v -> max = v -> sum = 0 ;
12221221 continue ;
1222+ }
12231223
12241224 dimensions ++ ;
12251225
@@ -1377,25 +1377,41 @@ static void facets_histogram_generate(FACETS *facets, FACET_KEY *k, BUFFER *wb)
13771377 FACET_VALUE * v ;
13781378
13791379 foreach_value_in_key (k , v ) {
1380- if (unlikely (!v -> histogram ))
1381- continue ;
1380+ uint64_t d_sl , d_qr ;
1381+ uint64_t d_min , d_max ;
1382+ double d_avg , d_con ;
1383+
1384+ if (likely (v -> histogram )) {
1385+ d_sl = d_qr = 1 ;
1386+ d_min = v -> min ;
1387+ d_max = v -> max ;
1388+ d_avg = (double ) v -> sum / (double ) facets -> histogram .slots ;
1389+ d_con = (double ) v -> sum * 100.0 / (double ) sum ;
1390+ }
1391+ else {
1392+ d_sl = d_qr = 0 ;
1393+ d_min = d_max = 0 ;
1394+ d_avg = d_con = 0.0 ;
1395+ }
13821396
13831397 buffer_json_add_array_item_object (wb ); // dimension
13841398 {
1399+ buffer_json_member_add_string (wb , "id" , facets_key_value_id (k , v ));
1400+
13851401 facets_key_value_transformed (facets , k , v , tmp , FACETS_TRANSFORM_HISTOGRAM );
1386- buffer_json_member_add_string (wb , "id " , buffer_tostring (tmp ));
1402+ buffer_json_member_add_string (wb , "nm " , buffer_tostring (tmp ));
13871403 buffer_json_member_add_object (wb , "ds" );
13881404 {
1389- buffer_json_member_add_uint64 (wb , "sl" , 1 );
1390- buffer_json_member_add_uint64 (wb , "qr" , 1 );
1405+ buffer_json_member_add_uint64 (wb , "sl" , d_sl );
1406+ buffer_json_member_add_uint64 (wb , "qr" , d_qr );
13911407 }
13921408 buffer_json_object_close (wb ); // ds
13931409 buffer_json_member_add_object (wb , "sts" );
13941410 {
1395- buffer_json_member_add_uint64 (wb , "min" , v -> min );
1396- buffer_json_member_add_uint64 (wb , "max" , v -> max );
1397- buffer_json_member_add_double (wb , "avg" , ( double ) v -> sum / ( double ) facets -> histogram . slots );
1398- buffer_json_member_add_double (wb , "con" , ( double ) v -> sum * 100.0 / ( double ) sum );
1411+ buffer_json_member_add_uint64 (wb , "min" , d_min );
1412+ buffer_json_member_add_uint64 (wb , "max" , d_max );
1413+ buffer_json_member_add_double (wb , "avg" , d_avg );
1414+ buffer_json_member_add_double (wb , "con" , d_con );
13991415 }
14001416 buffer_json_object_close (wb ); // sts
14011417 buffer_json_member_add_uint64 (wb , "pri" , pri ++ );
@@ -1469,12 +1485,13 @@ static void facets_histogram_generate(FACETS *facets, FACET_KEY *k, BUFFER *wb)
14691485
14701486 FACET_VALUE * v ;
14711487 foreach_value_in_key (k , v ) {
1472- if (unlikely (!v -> histogram ))
1473- continue ;
1474-
14751488 buffer_json_add_array_item_array (wb ); // point
14761489
1477- buffer_json_add_array_item_uint64 (wb , v -> histogram [i ]);
1490+ if (v -> histogram )
1491+ buffer_json_add_array_item_uint64 (wb , v -> histogram [i ]);
1492+ else
1493+ buffer_json_add_array_item_double (wb , NAN );
1494+
14781495 buffer_json_add_array_item_uint64 (wb , 0 ); // arp - anomaly rate
14791496 buffer_json_add_array_item_uint64 (wb , 0 ); // pa - point annotation
14801497
@@ -1501,7 +1518,8 @@ static void facets_histogram_generate(FACETS *facets, FACET_KEY *k, BUFFER *wb)
15011518 buffer_json_member_add_string (wb , "units" , "events" );
15021519 buffer_json_member_add_object (wb , "dimensions" );
15031520 {
1504- facets_histogram_value_names (wb , facets , k , "ids" , NULL );
1521+ facets_histogram_value_ids (wb , facets , k , "ids" , NULL );
1522+ facets_histogram_value_names (wb , facets , k , "names" , NULL );
15051523 facets_histogram_value_units (wb , facets , k , "units" );
15061524
15071525 buffer_json_member_add_object (wb , "sts" );
@@ -1555,7 +1573,7 @@ static void facets_histogram_generate(FACETS *facets, FACET_KEY *k, BUFFER *wb)
15551573 }
15561574 buffer_json_array_close (wb ); // grouped_by
15571575
1558- facets_histogram_value_names (wb , facets , k , "ids" , NULL );
1576+ facets_histogram_value_ids (wb , facets , k , "ids" , NULL );
15591577 facets_histogram_value_names (wb , facets , k , "names" , NULL );
15601578 facets_histogram_value_colors (wb , facets , k , "colors" );
15611579 facets_histogram_value_units (wb , facets , k , "units" );
@@ -1840,17 +1858,21 @@ inline FACET_KEY *facets_register_facet_id(FACETS *facets, const char *key_id, F
18401858
18411859void facets_register_facet_filter_id (FACETS * facets , const char * key_id , const char * value_id , FACET_KEY_OPTIONS options ) {
18421860 FACET_KEY * k = facets_register_facet_id (facets , key_id , options );
1843- if (k ) {
1844- if (is_valid_string_hash (value_id )) {
1845- k -> default_selected_for_values = false;
1846- FACET_VALUE_ADD_OR_UPDATE_SELECTED (k , NULL , str_to_facets_hash (value_id ));
1847- }
1861+ if (k && is_valid_string_hash (value_id )) {
1862+ if (!(k -> options & FACET_KEY_OPTION_FACET ))
1863+ k -> options |= FACET_KEY_OPTION_FILTER_ONLY ;
1864+
1865+ k -> default_selected_for_values = false;
1866+ FACET_VALUE_ADD_OR_UPDATE_SELECTED (k , NULL , str_to_facets_hash (value_id ));
18481867 }
18491868}
18501869
18511870void facets_register_facet_filter (FACETS * facets , const char * key , const char * value , FACET_KEY_OPTIONS options ) {
18521871 FACET_KEY * k = facets_register_facet (facets , key , options );
18531872 if (k ) {
1873+ if (!(k -> options & FACET_KEY_OPTION_FACET ))
1874+ k -> options |= FACET_KEY_OPTION_FILTER_ONLY ;
1875+
18541876 FACETS_HASH hash = FACETS_HASH_FUNCTION (value , strlen (value ));
18551877 k -> default_selected_for_values = false;
18561878 FACET_VALUE_ADD_OR_UPDATE_SELECTED (k , value , hash );
@@ -2591,7 +2613,7 @@ void facets_report(FACETS *facets, BUFFER *wb, DICTIONARY *used_hashes_registry)
25912613 CLEAN_BUFFER * tb = buffer_create (0 , NULL );
25922614 FACET_KEY * k ;
25932615 foreach_key_in_facets (facets , k ) {
2594- if (!k -> values .enabled || k -> options & FACET_KEY_OPTION_HIDDEN )
2616+ if (!k -> values .enabled || k -> options & ( FACET_KEY_OPTION_HIDDEN | FACET_KEY_OPTION_FILTER_ONLY ) )
25952617 continue ;
25962618
25972619 facets_sort_and_reorder_values (k );
0 commit comments