Blame examples/event-test.c

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