rustyhex

Member
Jul 18, 2013
10
0
1
cPanel Access Level
Root Administrator
Hi!

I am using Whostmgr::XMLUI::cPanel to get some info in the WHM plugin (with cpanel_exec).
For example, i set:
Code:
cpanel_xmlapi_module = 'MysqlFE'
cpanel_xmlapi_func = 'listdbs'
to get mysql databases.

Everything works fine, but i have 2 questions:
1. What module and func should i use to retrieve service status? (xml-api/servicestatus)
Nothing works, no info in the docs.

2. api2_stat from StatsBar is marked as deprecated. What should i use instead?

Thanks.

p.s. Api call tracer shows absolutely nothing on https://cpanel:2087/cpsess123456/xml-api/servicestatus.
 
Last edited:

KostonConsulting

Well-Known Member
Verifed Vendor
Jun 17, 2010
255
1
68
San Francisco, CA
cPanel Access Level
Root Administrator
Hi!
Everything works fine, but i have 2 questions:
1. What module and func should i use to retrieve service status? (xml-api/servicestatus)
Nothing works, no info in the docs.
I have no issues with this call on test servers. Is it shown as available by the 'applist' call?

https://my.hostname.com:2087/cpsess7078929775/xml-api/applist

If not, what version of cPanel/WHM are you on?

2. api2_stat from StatsBar is marked as deprecated. What should i use instead?
That is likely a mistake. It's being used all over the place in X3. Execute this grep and you'll see that it's being used everywhere. If it were deprecated, X3 should be updated to use a new call.


Code:
[/usr/local/cpanel/base/frontend/x3]# grep -R 'StatsBar::stat' *
 

rustyhex

Member
Jul 18, 2013
10
0
1
cPanel Access Level
Root Administrator
Sorry about the confusion.

It is definitely in the applist:
https://my.hostname.com:2087/cpsess7...ml-api/applist

And xml-api call works fine:
https://cpanel:2087/cpsess123456/xml-api/servicestatus

I wish to make this call through the Whostmgr::XMLUI::cPanel::cpanel_exec. I don't know how, because it requires 2 arguments:
module and function. if the servicestatus is a function, then what's the module name? Status? Serverinfo?

I am asking, because i am not completely sure, that it's possible.
 
Last edited:

KostonConsulting

Well-Known Member
Verifed Vendor
Jun 17, 2010
255
1
68
San Francisco, CA
cPanel Access Level
Root Administrator
I wish to make this call through the Whostmgr::XMLUI::cPanel::cpanel_exec. I don't know how, because it requires 2 arguments:
module and function. if the servicestatus is a function, then what's the module name? Status? Serverinfo?

I am asking, because i am not completely sure, that it's possible.
Sorry, I didn't read clearly enough. cpanel_exec() only attaches to API2 and API1, not the XML-API. It's really just a wrapper around calling /usr/local/cpanel/cpanel --json-fast-connect or /usr/local/cpanel/cpanel --xml-fast-connect which provide access to API1/API2.

You'll have to query the XML-API directly in order to access 'servicestatus'. That can be done with the Cpanel::PublicAPI.pm module. Here's some sample code to access it on localhost:

Code:
#!/usr/bin/perl

BEGIN { unshift( @INC, '/usr/local/cpanel' ); }

use Cpanel::PublicAPI ();
use Data::Dumper      ();
use IPC::Open3        ();
use JSON::PP          ();

my $accessHash = load_access_hash();
my $func       = 'servicestatus';
my $formdata   = {};

my $publicAPI = Cpanel::PublicAPI->new(
    usessl     => 1,
    user       => $ENV{'REMOTE_USER'} || getpwuid($<),
    accesshash => $accessHash
);

my $response = $publicAPI->whm_api( $func, $formdata, 'json' );
my $jsonObject = JSON::PP::decode_json($response);

print "JSON API RESPONSE: \n" . Data::Dumper::Dumper($jsonObject) . "\n";



sub load_access_hash {
    my $accessHash = '';

    #Ensure access hash exists
    my $theHash = "/root/.accesshash";
    unless ( -f $theHash ) {
        my $pid = IPC::Open3::open3( my $wh, my $rh, my $eh, '/usr/local/cpanel/whostmgr/bin/whostmgr setrhash' );
        waitpid( $pid, 0 );
    }

    #get accesshash
    open( my $hashFh, "<", $theHash ) || die "Cannot open access hash: " . $theHash;
    $accessHash = do { local $/; <$hashFh>; };
    close($hashFh);
    $accessHash =~ s/\n//g;

    return $accessHash;
}