static void top(void) { xenstat_domain **domains; unsigned int i, num_domains = 0; /* Now get the node information */ if (prev_node != NULL) xenstat_free_node(prev_node); prev_node = cur_node; cur_node = xenstat_get_node(xhandle, XENSTAT_ALL); if (cur_node == NULL) fail("Failed to retrieve statistics from libxenstat\n"); /* dump summary top information */ if (!batch) do_summary(); /* Count the number of domains for which to report data */ num_domains = xenstat_node_num_domains(cur_node); domains = calloc(num_domains, sizeof(xenstat_domain *)); if(domains == NULL) fail("Failed to allocate memory\n"); for (i=0; i < num_domains; i++) domains[i] = xenstat_node_domain_by_index(cur_node, i); /* Sort */ qsort(domains, num_domains, sizeof(xenstat_domain *), (int(*)(const void *, const void *))compare_domains); if(first_domain_index >= num_domains) first_domain_index = num_domains-1; for (i = first_domain_index; i < num_domains; i++) { if(!batch && current_row() == lines()-1) break; if (i == first_domain_index || repeat_header) do_header(); do_domain(domains[i]); if (show_vcpus) do_vcpu(domains[i]); if (show_networks) do_network(domains[i]); if (show_vbds) do_vbd(domains[i]); if (show_tmem) do_tmem(domains[i]); } if (!batch) do_bottom_line(); free(domains); }
int main(void) { xenstat_handle *handle = xenstat_init(); if(!handle) { fputs("Internal error in xenstats, failed to initialize handle\n", stderr); exit(1); } xenstat_node *node = xenstat_get_node(handle, XENSTAT_ALL); if(!node) { fputs("Failed to get statistics from libxenlight\n", stderr); exit(2); } printf("<<<xen_info>>>\n"); printf("version\t%s\n", xenstat_node_xen_version(node)); printf("total_memory\t%llu\n", xenstat_node_tot_mem(node)); printf("free_memory\t%llu\n", xenstat_node_free_mem(node)); // printf("freeable_memory\t%li\n", xenstat_node_freeable_mb(node)); printf("cpu_amount\t%i\n", xenstat_node_num_cpus(node)); printf("cpu_speed\t%llu\n", xenstat_node_cpu_hz(node)); int domains_amount = xenstat_node_num_domains(node); if(!domains_amount) exit(0); printf("domains\t%i\n", domains_amount); xenstat_domain** domains = malloc(sizeof(xenstat_domain*) * domains_amount); for(int i=0; i<domains_amount; i++) { xenstat_domain* domain = xenstat_node_domain_by_index(node, i); if(xenstat_domain_id(domain)) { printf("<<<<%s>>>>\n", xenstat_domain_name(domain)); } else{ printf("<<<<>>>>\n"); } printf("<<<xen_domain>>>\n"); printf("id\t%u\n", xenstat_domain_id(domain)); } return 0; }