Blame examples/event-test.c

Packit a07778
#include <config.h>
Packit a07778
#include <stdio.h>
Packit a07778
#include <string.h>
Packit a07778
Packit a07778
#include <glib.h>
Packit a07778
#include <libvirt/libvirt.h>
Packit a07778
#include <libvirt-glib/libvirt-glib.h>
Packit a07778
Packit a07778
#define STREQ(a,b) (strcmp((a),(b)) == 0)
Packit a07778
Packit a07778
#ifndef ATTRIBUTE_UNUSED
Packit a07778
#define ATTRIBUTE_UNUSED __attribute__((__unused__))
Packit a07778
#endif
Packit a07778
Packit a07778
/* Prototypes */
Packit a07778
const char *eventToString(int event);
Packit a07778
int myDomainEventCallback1 (virConnectPtr conn, virDomainPtr dom, int event, int detail, void *opaque);
Packit a07778
int myDomainEventCallback2 (virConnectPtr conn, virDomainPtr dom, int event, int detail, void *opaque);
Packit a07778
Packit a07778
void usage(const char *pname);
Packit a07778
Packit a07778
/* Callback functions */
Packit a07778
Packit a07778
const char *eventToString(int event) {
Packit a07778
    const char *ret = NULL;
Packit a07778
    switch(event) {
Packit a07778
        case VIR_DOMAIN_EVENT_DEFINED:
Packit a07778
            ret ="Defined";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_UNDEFINED:
Packit a07778
            ret ="Undefined";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STARTED:
Packit a07778
            ret ="Started";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_SUSPENDED:
Packit a07778
            ret ="Suspended";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_RESUMED:
Packit a07778
            ret ="Resumed";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STOPPED:
Packit a07778
            ret ="Stopped";
Packit a07778
            break;
Packit a07778
        default:
Packit a07778
            ret ="Unknown Event";
Packit a07778
    }
Packit a07778
    return ret;
Packit a07778
}
Packit a07778
Packit a07778
static const char *eventDetailToString(int event, int detail) {
Packit a07778
    const char *ret = "";
Packit a07778
    switch(event) {
Packit a07778
    case VIR_DOMAIN_EVENT_DEFINED:
Packit a07778
        if (detail == VIR_DOMAIN_EVENT_DEFINED_ADDED)
Packit a07778
            ret = "Added";
Packit a07778
        else if (detail == VIR_DOMAIN_EVENT_DEFINED_UPDATED)
Packit a07778
            ret = "Updated";
Packit a07778
        break;
Packit a07778
    case VIR_DOMAIN_EVENT_UNDEFINED:
Packit a07778
        if (detail == VIR_DOMAIN_EVENT_UNDEFINED_REMOVED)
Packit a07778
            ret = "Removed";
Packit a07778
        break;
Packit a07778
    case VIR_DOMAIN_EVENT_STARTED:
Packit a07778
        switch (detail) {
Packit a07778
        case VIR_DOMAIN_EVENT_STARTED_BOOTED:
Packit a07778
            ret = "Booted";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STARTED_MIGRATED:
Packit a07778
            ret = "Migrated";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STARTED_RESTORED:
Packit a07778
            ret = "Restored";
Packit a07778
            break;
Packit a07778
        default:
Packit a07778
            break;
Packit a07778
        }
Packit a07778
        break;
Packit a07778
    case VIR_DOMAIN_EVENT_SUSPENDED:
Packit a07778
        if (detail == VIR_DOMAIN_EVENT_SUSPENDED_PAUSED)
Packit a07778
            ret = "Paused";
Packit a07778
        else if (detail == VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED)
Packit a07778
            ret = "Migrated";
Packit a07778
        break;
Packit a07778
    case VIR_DOMAIN_EVENT_RESUMED:
Packit a07778
        if (detail == VIR_DOMAIN_EVENT_RESUMED_UNPAUSED)
Packit a07778
            ret = "Unpaused";
Packit a07778
        else if (detail == VIR_DOMAIN_EVENT_RESUMED_MIGRATED)
Packit a07778
            ret = "Migrated";
Packit a07778
        break;
Packit a07778
    case VIR_DOMAIN_EVENT_STOPPED:
Packit a07778
        switch (detail) {
Packit a07778
        case VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN:
Packit a07778
            ret = "Shutdown";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STOPPED_DESTROYED:
Packit a07778
            ret = "Destroyed";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STOPPED_CRASHED:
Packit a07778
            ret = "Crashed";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STOPPED_MIGRATED:
Packit a07778
            ret = "Migrated";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STOPPED_SAVED:
Packit a07778
            ret = "Saved";
Packit a07778
            break;
Packit a07778
        case VIR_DOMAIN_EVENT_STOPPED_FAILED:
Packit a07778
            ret = "Failed";
Packit a07778
            break;
Packit a07778
        default:
Packit a07778
            break;
Packit a07778
        }
Packit a07778
        break;
Packit a07778
    default:
Packit a07778
        break;
Packit a07778
    }
Packit a07778
    return ret;
Packit a07778
}
Packit a07778
Packit a07778
Packit a07778
int myDomainEventCallback1 (virConnectPtr conn ATTRIBUTE_UNUSED,
Packit a07778
                            virDomainPtr dom,
Packit a07778
                            int event,
Packit a07778
                            int detail,
Packit a07778
                            void *opaque ATTRIBUTE_UNUSED)
Packit a07778
{
Packit a07778
    printf("%s EVENT: Domain %s(%d) %s: %s\n", __FUNCTION__,
Packit a07778
           virDomainGetName(dom), virDomainGetID(dom),
Packit a07778
           eventToString(event),
Packit a07778
           eventDetailToString(event, detail));
Packit a07778
Packit a07778
    return 0;
Packit a07778
}
Packit a07778
Packit a07778
int myDomainEventCallback2 (virConnectPtr conn ATTRIBUTE_UNUSED,
Packit a07778
                            virDomainPtr dom,
Packit a07778
                            int event,
Packit a07778
                            int detail,
Packit a07778
                            void *opaque ATTRIBUTE_UNUSED)
Packit a07778
{
Packit a07778
    printf("%s EVENT: Domain %s(%d) %s: %s\n", __FUNCTION__,
Packit a07778
           virDomainGetName(dom), virDomainGetID(dom),
Packit a07778
           eventToString(event),
Packit a07778
           eventDetailToString(event, detail));
Packit a07778
Packit a07778
    return 0;
Packit a07778
}
Packit a07778
Packit a07778
/* main test functions */
Packit a07778
Packit a07778
void usage(const char *pname)
Packit a07778
{
Packit a07778
    printf("%s uri\n", pname);
Packit a07778
}
Packit a07778
Packit a07778
int main(int argc, char **argv)
Packit a07778
{
Packit a07778
    GMainLoop *loop;
Packit a07778
Packit a07778
    gvir_init(&argc, &argv);
Packit a07778
Packit a07778
    if(argc > 1 && STREQ(argv[1],"--help")) {
Packit a07778
        usage(argv[0]);
Packit a07778
        return -1;
Packit a07778
    }
Packit a07778
    loop = g_main_loop_new(g_main_context_default(), 1);
Packit a07778
Packit a07778
    gvir_event_register();
Packit a07778
Packit a07778
    virConnectPtr dconn = NULL;
Packit a07778
    dconn = virConnectOpen (argv[1] ? argv[1] : NULL);
Packit a07778
    if (!dconn) {
Packit a07778
        printf("error opening\n");
Packit a07778
        return -1;
Packit a07778
    }
Packit a07778
Packit a07778
    g_debug("Registering domain event cbs");
Packit a07778
Packit a07778
    /* Add 2 callbacks to prove this works with more than just one */
Packit a07778
    virConnectDomainEventRegister(dconn, myDomainEventCallback1, NULL, NULL);
Packit a07778
    virConnectDomainEventRegister(dconn, myDomainEventCallback2, NULL, NULL);
Packit a07778
Packit a07778
    g_main_loop_run(loop);
Packit a07778
Packit a07778
    if (virConnectClose(dconn) < 0)
Packit a07778
        printf("error closing\n");
Packit a07778
Packit a07778
    printf("done\n");
Packit a07778
    return 0;
Packit a07778
}