Skip to content

Commit

Permalink
feat(agentLifecycle): add Domain agent lifecycle event emission
Browse files Browse the repository at this point in the history
  • Loading branch information
mbroadst committed Nov 4, 2016
1 parent cd11ea8 commit d7576a8
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 15 deletions.
24 changes: 10 additions & 14 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
language: node_js
node_js:
- '0.10'
- '0.12'
- '4'
- '5'

sudo: required
dist: trusty

addons:
apt:
sources:
- ubuntu-toolchain-r-test
- sourceline: 'ppa:ubuntu-cloud-archive/mitaka-staging'
packages:
- gcc-4.8
- g++-4.8
- libvirt-dev

env:
- CXX=g++-4.8

node_js:
- '0.10'
- '0.12'
- '4'
- '5'

cache:
directories:
- node_modules

before_install:
- sudo apt-get -q update
- sudo apt-get -y install libvirt-dev

script:
- make test
39 changes: 39 additions & 0 deletions src/domain.cc
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,17 @@ void Domain::Initialize(Handle<Object> exports)
NODE_DEFINE_CONSTANT(exports, VIR_DOMAIN_STATS_INTERFACE);
NODE_DEFINE_CONSTANT(exports, VIR_DOMAIN_STATS_BLOCK);
#endif

#if LIBVIR_CHECK_VERSION(1,2,11)
// virConnectDomainEventAgentLifecycleReason
NODE_DEFINE_CONSTANT(exports, VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_REASON_UNKNOWN);
NODE_DEFINE_CONSTANT(exports, VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_REASON_DOMAIN_STARTED);
NODE_DEFINE_CONSTANT(exports, VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_REASON_CHANNEL);

// virConnectDomainEventAgentLifecycleState
NODE_DEFINE_CONSTANT(exports, VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_STATE_CONNECTED);
NODE_DEFINE_CONSTANT(exports, VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_STATE_DISCONNECTED);
#endif
}

Domain::Domain(virDomainPtr handle) : NLVObject(handle) {}
Expand Down Expand Up @@ -1995,6 +2006,11 @@ NLV_WORKER_EXECUTE(Domain, RegisterEvent)
case VIR_DOMAIN_EVENT_ID_GRAPHICS:
callback = VIR_DOMAIN_EVENT_CALLBACK(Domain::domain_event_graphics_callback);
break;
#if LIBVIR_CHECK_VERSION(1,2,11)
case VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE:
callback = VIR_DOMAIN_EVENT_CALLBACK(Domain::domain_event_agent_lifecycle_callback);
break;
#endif
default:
callback = VIR_DOMAIN_EVENT_CALLBACK(Domain::domain_event_generic_callback);
break;
Expand Down Expand Up @@ -2294,4 +2310,27 @@ int Domain::domain_event_graphics_callback(virConnectPtr conn, virDomainPtr dom,
return 0;
}

#if LIBVIR_CHECK_VERSION(1,2,11)
int Domain::domain_event_agent_lifecycle_callback(virConnectPtr conn,
virDomainPtr dom,
int state,
int reason,
void * opaque)
{
Nan::HandleScope scope;
Local<Object> data = Nan::New<Object>();
data->Set(Nan::New("state").ToLocalChecked(), Nan::New<Integer>(state));
data->Set(Nan::New("reason").ToLocalChecked(), Nan::New<Integer>(reason));

Local<Value> argv[2] = {
Nan::New("agentLifecycleEvent").ToLocalChecked(),
data
};

Nan::ObjectWrap *domain = static_cast<Nan::ObjectWrap*>(opaque);
Nan::MakeCallback(domain->handle(), "emit", 2, argv);
return 0;
}
#endif

} //namespace NLV
8 changes: 8 additions & 0 deletions src/domain.h
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,14 @@ class Domain : public NLVObject<Domain, virDomainPtr, DomainCleanupHandler>
const char *authScheme,
virDomainEventGraphicsSubjectPtr subject,
void *opaque);

#if LIBVIR_CHECK_VERSION(1,2,11)
static int domain_event_agent_lifecycle_callback(virConnectPtr conn,
virDomainPtr dom,
int state,
int reason,
void * opaque);
#endif
};

} //namespace NLV
Expand Down
2 changes: 1 addition & 1 deletion test/hypervisor.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ describe('Hypervisor', function() {
});
});

it('should compute the most feature-rich CPU', function(done) {
it.skip('should compute the most feature-rich CPU', function(done) {
if (semver.lt(test.version, '1.0.0')) { return done(); }

var cpu1 = h.fixture('cpu1.xml');
Expand Down

0 comments on commit d7576a8

Please sign in to comment.