<p dir="ltr"><br>
10 июня 2015 г. 16:00 пользователь "Michal Privoznik" <<a href="mailto:mprivozn@redhat.com">mprivozn@redhat.com</a>> написал:<br>
><br>
> On 10.06.2015 10:18, Vasiliy Tolstov wrote:<br>
> > * libvirt_connect_get_all_domain_stats<br>
> > * libvirt_domain_block_resize<br>
> > * libvirt_domain_block_job_abort<br>
> > * libvirt_domain_block_job_set_speed<br>
> ><br>
> > Signed-off-by: Vasiliy Tolstov <<a href="mailto:v.tolstov@selfip.ru">v.tolstov@selfip.ru</a>><br>
> > ---<br>
> >  src/libvirt-php.c | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++-<br>
> >  src/libvirt-php.h |   4 ++<br>
> >  2 files changed, 180 insertions(+), 1 deletion(-)<br>
><br>
> From the e-mail header:<br>
><br>
> Content-Type: text/plain; charset=yes<br>
><br>
> I've not know there's such charset as yes :)<br>
><br>
><br>
> ><br>
> > diff --git a/src/libvirt-php.c b/src/libvirt-php.c<br>
> > index e9b9657..f9096ef 100644<br>
> > --- a/src/libvirt-php.c<br>
> > +++ b/src/libvirt-php.c<br>
> > @@ -91,6 +91,7 @@ static zend_function_entry libvirt_functions[] = {<br>
> >       PHP_FE(libvirt_connect_get_maxvcpus, NULL)<br>
> >       PHP_FE(libvirt_connect_get_encrypted, NULL)<br>
> >       PHP_FE(libvirt_connect_get_secure, NULL)<br>
> > +     PHP_FE(libvirt_connect_get_all_domain_stats, NULL)<br>
> >       /* Stream functions */<br>
> >       PHP_FE(libvirt_stream_create, NULL)<br>
> >       PHP_FE(libvirt_stream_close, NULL)<br>
> > @@ -136,6 +137,10 @@ static zend_function_entry libvirt_functions[] = {<br>
> >       PHP_FE(libvirt_domain_memory_peek,NULL)<br>
> >       PHP_FE(libvirt_domain_memory_stats,NULL)<br>
> >       PHP_FE(libvirt_domain_block_stats,NULL)<br>
> > +     PHP_FE(libvirt_domain_block_resize,NULL)<br>
> > +     //      PHP_FE(libvirt_domain_block_copy,NULL)<br>
><br>
> Just drop this line.<br>
><br>
> > +     PHP_FE(libvirt_domain_block_job_abort,NULL)<br>
> > +     PHP_FE(libvirt_domain_block_job_set_speed,NULL)<br>
> >       PHP_FE(libvirt_domain_interface_stats,NULL)<br>
> >       PHP_FE(libvirt_domain_get_connect, NULL)<br>
> >       PHP_FE(libvirt_domain_migrate, NULL)<br>
> > @@ -1332,6 +1337,11 @@ PHP_MINIT_FUNCTION(libvirt)<br>
> >       /* Job was aborted but it's not cleanup up yet */<br>
> >       REGISTER_LONG_CONSTANT("VIR_DOMAIN_JOB_CANCELLED",      5, CONST_CS | CONST_PERSISTENT);<br>
> ><br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC",      VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT",      VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT, CONST_CS | CONST_PERSISTENT);<br>
> > +<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES",    VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT);<br>
> > +<br>
> >       /* Migration constants */<br>
> >       REGISTER_LONG_CONSTANT("VIR_MIGRATE_LIVE",                1, CONST_CS | CONST_PERSISTENT);<br>
> >       /* direct source -> dest host control channel Note the less-common spelling that we're stuck with: */<br>
> > @@ -1374,7 +1384,7 @@ PHP_MINIT_FUNCTION(libvirt)<br>
> >       REGISTER_LONG_CONSTANT("VIR_DOMAIN_FLAG_TEST_LOCAL_VNC",        DOMAIN_FLAG_TEST_LOCAL_VNC, CONST_CS | CONST_PERSISTENT);<br>
> >       REGISTER_LONG_CONSTANT("VIR_DOMAIN_FLAG_SOUND_AC97",            DOMAIN_FLAG_SOUND_AC97, CONST_CS | CONST_PERSISTENT);<br>
> >       REGISTER_LONG_CONSTANT("VIR_DOMAIN_DISK_FILE",                  DOMAIN_DISK_FILE, CONST_CS | CONST_PERSISTENT);<br>
> > -     REGISTER_LONG_CONSTANT("VIR_DOMAIN_DISK_BLOCK",                 DOMAIN_DISK_BLOCK, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_DISK_BLOCK",         DOMAIN_DISK_BLOCK, CONST_CS | CONST_PERSISTENT);<br>
><br>
> This looks like spurious change.<br>
><br>
> >       REGISTER_LONG_CONSTANT("VIR_DOMAIN_DISK_ACCESS_ALL",            DOMAIN_DISK_ACCESS_ALL, CONST_CS | CONST_PERSISTENT);<br>
> ><br>
> >       /* Domain metadata constants */<br>
> > @@ -1385,6 +1395,24 @@ PHP_MINIT_FUNCTION(libvirt)<br>
> >       REGISTER_LONG_CONSTANT("VIR_DOMAIN_AFFECT_LIVE",                1, CONST_CS | CONST_PERSISTENT);<br>
> >       REGISTER_LONG_CONSTANT("VIR_DOMAIN_AFFECT_CONFIG",              2, CONST_CS | CONST_PERSISTENT);<br>
> ><br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_STATS_STATE",                VIR_DOMAIN_STATS_STATE, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_STATS_CPU_TOTAL",            VIR_DOMAIN_STATS_CPU_TOTAL, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_STATS_BALLOON",              VIR_DOMAIN_STATS_BALLOON, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_STATS_VCPU",         VIR_DOMAIN_STATS_VCPU, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_STATS_INTERFACE",            VIR_DOMAIN_STATS_INTERFACE, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_DOMAIN_STATS_BLOCK",                VIR_DOMAIN_STATS_BLOCK, CONST_CS | CONST_PERSISTENT);<br>
> > +<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_ACTIVE",      VIR_CONNECT_GET_ALL_DOMAINS_STATS_ACTIVE, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_INACTIVE",    VIR_CONNECT_GET_ALL_DOMAINS_STATS_INACTIVE, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_OTHER",       VIR_CONNECT_GET_ALL_DOMAINS_STATS_OTHER, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_PAUSED",      VIR_CONNECT_GET_ALL_DOMAINS_STATS_PAUSED, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_PERSISTENT",  VIR_CONNECT_GET_ALL_DOMAINS_STATS_PERSISTENT, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_RUNNING",     VIR_CONNECT_GET_ALL_DOMAINS_STATS_RUNNING, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_SHUTOFF",     VIR_CONNECT_GET_ALL_DOMAINS_STATS_SHUTOFF, CONST_CS | CONST_PERSISTENT);<br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_TRANSIENT", VIR_CONNECT_GET_ALL_DOMAINS_STATS_TRANSIENT, CONST_CS | CONST_PERSISTENT);<br>
> > +     //      REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING",     VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING, CONST_CS | CONST_PERSISTENT);<br>
><br>
> This line should be dropped too.<br>
><br>
> > +     REGISTER_LONG_CONSTANT("VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS", VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS, CONST_CS | CONST_PERSISTENT);<br>
> > +<br>
> >       /* Connect flags */<br>
> >       REGISTER_LONG_CONSTANT("VIR_CONNECT_FLAG_SOUNDHW_GET_NAMES",    CONNECT_FLAG_SOUNDHW_GET_NAMES, CONST_CS | CONST_PERSISTENT);<br>
> ><br>
> > @@ -2425,6 +2453,69 @@ PHP_FUNCTION(libvirt_connect_get_secure)<br>
> >       RETURN_LONG( virConnectIsSecure(conn->conn) );<br>
> >  }<br>
> ><br>
> > +<br>
> > +/*<br>
> > +     Function name:  libvirt_connect_get_all_domain_stats<br>
> > +     Since version:  0.5.1(-1)<br>
> > +     Description:    Query statistics for all domains on a given connection<br>
> > +     Arguments:▶     @conn [resource]: resource for connection<br>
><br>
> s/▶//<br>
><br>
> > +                     @stats [int]: the statistic groups from VIR_DOMAIN_STATS_*<br>
> > +                     @flags [int]: the filter flags from VIR_CONNECT_GET_ALL_DOMAINS_STATS_*<br>
> > +     Returns:        assoc array with statistics or false on error<br>
> > +*/<br>
> > +PHP_FUNCTION(libvirt_connect_get_all_domain_stats)<br>
> > +{<br>
> > +     php_libvirt_connection *conn = NULL;<br>
> > +     zval *zconn;<br>
> > +     int retval = -1;<br>
> > +     long flags = 0;<br>
> > +     long stats = 0;<br>
> > +     char *name = NULL;<br>
><br>
> const char *name;<br>
><br>
> > +     int i;<br>
> > +     int j;<br>
> > +     virTypedParameter params;<br>
> > +     virDomainStatsRecordPtr *retstats = NULL;<br>
> > +<br>
> > +     GET_CONNECTION_FROM_ARGS("r|l|l",&zconn, &stats, &flags);<br>
> > +<br>
> > +     retval = virConnectGetAllDomainStats(conn->conn, stats, &retstats, flags);<br>
> > +<br>
> > +     array_init(return_value);<br>
> > +     if (retval < 0)<br>
> > +             RETURN_FALSE;<br>
> > +<br>
> > +     for (i=0; i < retval; i++) {<br>
> > +             zval *arr2;<br>
> > +             ALLOC_INIT_ZVAL(arr2);<br>
> > +             array_init(arr2);<br>
> > +             for (j = 0; j < retstats[i]->nparams; j++) {<br>
> > +                     params = retstats[i]->params[j];<br>
> > +                     switch (params.type) {<br>
> > +                     case VIR_TYPED_PARAM_INT:<br>
> > +                             add_assoc_long(arr2, params.field, params.value.i);<br>
> > +                     case VIR_TYPED_PARAM_UINT:<br>
> > +                             add_assoc_long(arr2, params.field, params.value.ui);<br>
> > +                     case VIR_TYPED_PARAM_LLONG:<br>
> > +                             add_assoc_long(arr2, params.field, params.value.l);<br>
> > +                     case VIR_TYPED_PARAM_ULLONG:<br>
> > +                             add_assoc_long(arr2, params.field, params.value.ul);<br>
> > +                     case VIR_TYPED_PARAM_DOUBLE:<br>
> > +                             add_assoc_double(arr2, params.field, params.value.d);<br>
> > +                     case VIR_TYPED_PARAM_BOOLEAN:<br>
> > +                             add_assoc_bool(arr2, params.field, params.value.b);<br>
> > +                     case VIR_TYPED_PARAM_STRING:<br>
> > +                             add_assoc_string_ex(arr2, params.field, strlen(params.field)+1, params.value.s, strlen(params.value.s)+1);<br>
> > +                     }<br>
> > +             }<br>
> > +             name = virDomainGetName(retstats[i]->dom);<br>
> > +             zend_hash_update(Z_ARRVAL_P(return_value), name, strlen(name)+1, &arr2, sizeof(arr2), NULL);<br>
> > +     }<br>
> > +<br>
> > +     virDomainStatsRecordListFree(retstats);<br>
> > +}<br>
> > +<br>
> > +<br>
> > +<br>
><br>
> Otherwise looking good. Fixed all the nits, ACKed and pushed.<br>
><br>
> Michal</p>
<p dir="ltr">Thanks!</p>