static int vdi_tree(int argc, char **argv) { init_tree(); parse_vdi(print_vdi_tree, SD_INODE_HEADER_SIZE, NULL); dump_tree(); return EXIT_SUCCESS; }
static int node_info(int argc, char **argv) { int i, ret, success = 0; uint64_t total_size = 0, total_avail = 0, total_vdi_size = 0; char total_str[UINT64_DECIMAL_SIZE], avail_str[UINT64_DECIMAL_SIZE], vdi_size_str[UINT64_DECIMAL_SIZE]; if (!raw_output) printf("Id\tSize\tUsed\tUse%%\n"); for (i = 0; i < sd_nodes_nr; i++) { char host[128]; struct sd_node_req req; struct sd_node_rsp *rsp = (struct sd_node_rsp *)&req; char store_str[UINT64_DECIMAL_SIZE], free_str[UINT64_DECIMAL_SIZE]; addr_to_str(host, sizeof(host), sd_nodes[i].nid.addr, 0); sd_init_req((struct sd_req *)&req, SD_OP_STAT_SHEEP); req.epoch = sd_epoch; ret = send_light_req((struct sd_req *)&req, host, sd_nodes[i].nid.port); size_to_str(rsp->store_size, store_str, sizeof(store_str)); size_to_str(rsp->store_size - rsp->store_free, free_str, sizeof(free_str)); if (!ret) { printf(raw_output ? "%d %s %s %d%%\n" : "%2d\t%s\t%s\t%3d%%\n", i, store_str, free_str, rsp->store_size == 0 ? 0 : (int)(((double)(rsp->store_size - rsp->store_free) / rsp->store_size) * 100)); success++; } total_size += rsp->store_size; total_avail += rsp->store_free; } if (success == 0) { fprintf(stderr, "Cannot get information from any nodes\n"); return EXIT_SYSFAIL; } if (parse_vdi(cal_total_vdi_size, SD_INODE_HEADER_SIZE, &total_vdi_size) < 0) return EXIT_SYSFAIL; size_to_str(total_size, total_str, sizeof(total_str)); size_to_str(total_size - total_avail, avail_str, sizeof(avail_str)); size_to_str(total_vdi_size, vdi_size_str, sizeof(vdi_size_str)); printf(raw_output ? "Total %s %s %d%% %s\n" : "Total\t%s\t%s\t%3d%%\n\nTotal virtual image size\t%s\n", total_str, avail_str, (int)(((double)(total_size - total_avail) / total_size) * 100), vdi_size_str); return EXIT_SUCCESS; }
static int vdi_list(int argc, char **argv) { char *vdiname = argv[optind]; if (!raw_output) { printf(" name id size used shared creation time vdi id\n"); printf("------------------------------------------------------------------\n"); } if (vdiname) { struct get_vdi_info info; memset(&info, 0, sizeof(info)); info.name = vdiname; parse_vdi(print_vdi_list, SD_INODE_SIZE, &info); return EXIT_SUCCESS; } else { parse_vdi(print_vdi_list, SD_INODE_SIZE, NULL); return EXIT_SUCCESS; } }
static int vdi_list(int argc, char **argv) { char *vdiname = argv[optind]; if (!raw_output) printf(" Name Id Size Used Shared Creation time VDI id Copies Tag\n"); if (vdiname) { struct get_vdi_info info; memset(&info, 0, sizeof(info)); info.name = vdiname; if (parse_vdi(print_vdi_list, SD_INODE_SIZE, &info) < 0) return EXIT_SYSFAIL; return EXIT_SUCCESS; } else { if (parse_vdi(print_vdi_list, SD_INODE_SIZE, NULL) < 0) return EXIT_SYSFAIL; return EXIT_SUCCESS; } }
static int vdi_graph(int argc, char **argv) { /* print a header */ printf("digraph G {\n"); printf(" node [shape = \"box\", fontname = \"Courier\"];\n\n"); printf(" \"0\" [shape = \"ellipse\", label = \"root\"];\n\n"); parse_vdi(print_vdi_graph, SD_INODE_HEADER_SIZE, NULL); /* print a footer */ printf("}\n"); return EXIT_SUCCESS; }
static int node_info(int argc, char **argv) { int i, ret, success = 0; uint64_t total_size = 0, total_avail = 0, total_vdi_size = 0; char total_str[21], avail_str[21], vdi_size_str[21]; if (!raw_output) printf("Id\tSize\tUsed\tUse%%\n"); for (i = 0; i < nr_nodes; i++) { char name[128]; int fd; unsigned wlen, rlen; struct sd_node_req req; struct sd_node_rsp *rsp = (struct sd_node_rsp *)&req; char store_str[21], free_str[21]; addr_to_str(name, sizeof(name), node_list_entries[i].addr, 0); fd = connect_to(name, node_list_entries[i].port); if (fd < 0) return 1; memset(&req, 0, sizeof(req)); req.opcode = SD_OP_STAT_SHEEP; req.epoch = node_list_version; wlen = 0; rlen = 0; ret = exec_req(fd, (struct sd_req *)&req, NULL, &wlen, &rlen); close(fd); size_to_str(rsp->store_size, store_str, sizeof(store_str)); size_to_str(rsp->store_size - rsp->store_free, free_str, sizeof(free_str)); if (!ret && rsp->result == SD_RES_SUCCESS) { printf(raw_output ? "%d %s %s %d%%\n" : "%2d\t%s\t%s\t%3d%%\n", i, store_str, free_str, (int)(((double)(rsp->store_size - rsp->store_free) / rsp->store_size) * 100)); success++; } total_size += rsp->store_size; total_avail += rsp->store_free; } if (success == 0) { fprintf(stderr, "Cannot get information from any nodes\n"); return EXIT_SYSFAIL; } if (parse_vdi(cal_total_vdi_size, SD_INODE_HEADER_SIZE, &total_vdi_size) < 0) return EXIT_SYSFAIL; size_to_str(total_size, total_str, sizeof(total_str)); size_to_str(total_size - total_avail, avail_str, sizeof(avail_str)); size_to_str(total_vdi_size, vdi_size_str, sizeof(vdi_size_str)); printf(raw_output ? "Total %s %s %d%% %s\n" : "Total\t%s\t%s\t%3d%%\n\nTotal virtual image size\t%s\n", total_str, avail_str, (int)(((double)(total_size - total_avail) / total_size) * 100), vdi_size_str); return EXIT_SUCCESS; }