* include/libvir.h src/libvir.c src/libvir_sym.version src/virsh.c:

first pass at trying to implement virDomainGetInfo() quite a bit
  of work left to do.
Daniel
This commit is contained in:
Daniel Veillard committed 2005-12-05 18:14:37 +00:00
1 parent 1192a2ade3
commit 04130eb824
5 files changed
+170 -9

No files matched your search

+70
View File
@@ -521,3 +521,73 @@ virDomainSetMaxMemory(virDomainPtr domain, unsigned long memory) {
return(-1);
}
/**
* virDomainGetInfo:
* @domain: a domain object or NULL
* @info: pointer to a virDomainInfo structure allocated by the user
*
* Extract information about a domain. Note that if the connection
* used to get the domain is limited only a partial set of the informations
* can be extracted.
*
* Returns 0 in case of success and -1 in case of failure.
*/
int
virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) {
int ret;
if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC) ||
(info == NULL))
return(-1);
if (domain->conn->flags & VIR_CONNECT_RO) {
char *tmp;
tmp = virDomainDoStoreQuery(domain, "running");
if (tmp != NULL) {
if (tmp[0] == '1')
info->state = VIR_DOMAIN_RUNNING;
free(tmp);
} else {
info->state = VIR_DOMAIN_NONE;
}
tmp = virDomainDoStoreQuery(domain, "memory/target");
if (tmp != NULL) {
info->pages = atol(tmp) / 4096;
free(tmp);
} else {
info->pages = 0;
info->maxPages = 0;
}
} else {
xc_domaininfo_t dominfo;
dominfo.domain = domain->handle;
ret = xc_domain_getinfolist(domain->conn->handle, domain->handle,
1, &dominfo);
if (ret <= 0)
return(-1);
switch (dominfo.flags & 0xFF) {
case DOMFLAGS_DYING:
info->state = VIR_DOMAIN_SHUTDOWN;
break;
case DOMFLAGS_SHUTDOWN:
info->state = VIR_DOMAIN_SHUTOFF;
break;
case DOMFLAGS_PAUSED:
info->state = VIR_DOMAIN_PAUSED;
break;
case DOMFLAGS_BLOCKED:
info->state = VIR_DOMAIN_BLOCKED;
break;
case DOMFLAGS_RUNNING:
info->state = VIR_DOMAIN_RUNNING;
break;
default:
info->state = VIR_DOMAIN_NONE;
}
info->cpuTime = dominfo.cpu_time;
info->pages = dominfo.tot_pages;
info->maxPages = dominfo.max_pages;
}
return(0);
}
+9 -8
View File
@@ -1,19 +1,20 @@
{
global:
virConnectOpen;
virConnectOpenReadOnly;
virConnectClose;
virConnectGetVersion;
virDomainCreateLinux;
virConnectListDomains;
virDomainLookupByName;
virDomainLookupByID;
virConnectOpen;
virConnectOpenReadOnly;
virDomainCreateLinux;
virDomainDestroy;
virDomainSuspend;
virDomainResume;
virDomainGetName;
virDomainGetID;
virDomainGetInfo;
virDomainGetMaxMemory;
virDomainGetName;
virDomainLookupByID;
virDomainLookupByName;
virDomainResume;
virDomainSetMaxMemory;
virDomainSuspend;
local: *;
};
+30 -1
View File
@@ -20,7 +20,36 @@ virDomainPtr dom0;
int ids[MAX_DOM];
static void printDomain(virDomainPtr dom) {
printf("id %d: name %s\n", virDomainGetID(dom), virDomainGetName(dom));
virDomainInfo info;
printf("id %d: name %s ", virDomainGetID(dom), virDomainGetName(dom));
virDomainGetInfo(dom, &info);
if (virDomainGetInfo(dom, &info) < 0) {
printf("failed to get informations\n");
} else {
switch (info.state) {
case VIR_DOMAIN_RUNNING:
printf("running ");
break;
case VIR_DOMAIN_BLOCKED:
printf("blocked ");
break;
case VIR_DOMAIN_PAUSED:
printf("paused ");
break;
case VIR_DOMAIN_SHUTDOWN:
printf("in shutdown ");
break;
case VIR_DOMAIN_SHUTOFF:
printf("shut off ");
break;
default:
break;
}
printf("%lu CPU time, %lu mem used, %lu max_mem\n",
info.cpuTime, info.pages * 4096, info.maxPages * 4096);
}
}
int main(int argc, char **argv) {