void sinsp_table::stdout_print(vector<sinsp_sample_row>* sample_data, uint64_t time_delta) { vector<filtercheck_field_info>* legend = get_legend(); for(auto it = sample_data->begin(); it != sample_data->end(); ++it) { for(uint32_t j = 0; j < m_n_fields - 1; j++) { sinsp_filter_check* extractor = m_extractors->at(j + 1); uint64_t td = 0; if(extractor->m_aggregation == A_TIME_AVG || extractor->m_merge_aggregation == A_TIME_AVG) { td = time_delta; } m_printer->set_val(m_types->at(j + 1), it->m_values[j].m_val, it->m_values[j].m_len, it->m_values[j].m_cnt, legend->at(j + 1).m_print_format); char* prstr = m_printer->tostring_nice(NULL, 10, td); printf("%s ", prstr); //printf("%s ", m_printer->tostring(NULL)); } printf("\n"); } printf("----------------------\n"); }
pair<filtercheck_field_info*, string> sinsp_table::get_row_key_name_and_val(uint32_t rownum, bool force) { pair<filtercheck_field_info*, string> res; vector<sinsp_filter_check*>* extractors; vector<ppm_param_type>* types; if(m_do_merging) { extractors = &m_postmerge_extractors; types = &m_postmerge_types; } else { extractors = &m_premerge_extractors; types = &m_premerge_types; } if(m_sample_data == NULL || rownum >= m_sample_data->size()) { ASSERT(m_sample_data == NULL || m_sample_data->size() == 0); if(force) { res.first = (filtercheck_field_info*)((*extractors)[0])->get_field_info(); ASSERT(res.first != NULL); } else { res.first = NULL; } res.second = ""; } else { vector<filtercheck_field_info>* legend = get_legend(); res.first = (filtercheck_field_info*)((*extractors)[0])->get_field_info(); ASSERT(res.first != NULL); m_printer->set_val(types->at(0), m_sample_data->at(rownum).m_key.m_val, m_sample_data->at(rownum).m_key.m_len, m_sample_data->at(rownum).m_key.m_cnt, legend->at(0).m_print_format); res.second = m_printer->tostring(NULL); } return res; }
// // Returns the key of the first match, or NULL if no match // sinsp_table_field* sinsp_table::search_in_sample(string text) { vector<filtercheck_field_info>* legend = get_legend(); for(auto it = m_full_sample_data.begin(); it != m_full_sample_data.end(); ++it) { for(uint32_t j = 0; j < it->m_values.size(); j++) { ppm_param_type type; if(m_do_merging) { ASSERT(m_types->size() == it->m_values.size() + 2); type = m_types->at(j + 2); } else { ASSERT(m_types->size() == it->m_values.size() + 1); type = m_types->at(j + 1); } if(type == PT_CHARBUF || type == PT_BYTEBUF || type == PT_SYSCALLID || type == PT_PORT || type == PT_L4PROTO || type == PT_SOCKFAMILY || type == PT_IPV4ADDR || type == PT_IPV6ADDR || type == PT_UID || type == PT_GID) { m_printer->set_val(type, it->m_values[j].m_val, it->m_values[j].m_len, it->m_values[j].m_cnt, legend->at(j + 1).m_print_format); string strval = m_printer->tostring_nice(NULL, 0, 0); if(strval.find(text) != string::npos) { return &(it->m_key); } } } } return NULL; }
void sinsp_table::filter_sample() { vector<filtercheck_field_info>* legend = get_legend(); m_filtered_sample_data.clear(); for(auto it : m_full_sample_data) { for(uint32_t j = 0; j < it.m_values.size(); j++) { ppm_param_type type; if(m_do_merging) { type = m_postmerge_types[j + 1]; } else { type = m_premerge_types[j + 1]; } if(type == PT_CHARBUF || type == PT_BYTEBUF || type == PT_SYSCALLID || type == PT_PORT || type == PT_L4PROTO || type == PT_SOCKFAMILY || type == PT_IPV4ADDR || type == PT_IPV6ADDR || type == PT_UID || type == PT_GID) { m_printer->set_val(type, it.m_values[j].m_val, it.m_values[j].m_len, it.m_values[j].m_cnt, legend->at(j + 1).m_print_format); string strval = m_printer->tostring_nice(NULL, 0, 0); if(strval.find(m_freetext_filter) != string::npos) { m_filtered_sample_data.push_back(it); break; } } } } }
void sinsp_table::print_json(vector<sinsp_sample_row>* sample_data, uint64_t time_delta) { Json::FastWriter writer; vector<filtercheck_field_info>* legend = get_legend(); string res; uint32_t j = 0; uint32_t k = 0; m_json_output_lines_count = 0; if(sample_data->size() == 0) { return; } if(m_json_first_row >= sample_data->size()) { return; } if(m_json_last_row == 0 || m_json_last_row >= sample_data->size() - 1) { m_json_last_row = sample_data->size() - 1; } printf("\"data\": [\n"); for(k = m_json_first_row; k <= m_json_last_row; k++) { Json::Value root; Json::Value jd; auto row = sample_data->at(k); for(uint32_t j = 0; j < m_n_fields - 1; j++) { sinsp_filter_check* extractor = m_extractors->at(j + 1); uint64_t td = 0; if(extractor->m_aggregation == A_TIME_AVG || extractor->m_merge_aggregation == A_TIME_AVG) { td = time_delta; } m_printer->set_val(m_types->at(j + 1), row.m_values[j].m_val, row.m_values[j].m_len, row.m_values[j].m_cnt, legend->at(j + 1).m_print_format); jd.append(m_printer->tojson(NULL, 10, td)); } auto key = get_row_key_name_and_val(k, false); root["k"] = key.second; root["d"] = jd; res = writer.write(root); printf("%s", res.substr(0, res.size() - 1).c_str()); m_json_output_lines_count++; if(k >= m_json_last_row) { break; } if(j < sample_data->size() - 1) { printf(","); } printf("\n"); j++; } printf("],\n"); }