It's all about the answers!

Ask a question

Any API avaialbe for accessing com.ibm.team.repository.admin.activeServices?


Karthik Krishnan (8899123165) | asked Apr 27 '18, 3:50 a.m.
edited Apr 27 '18, 3:52 a.m.

Are there any API / OSLC calls available for accessing "ccm/admin#action=com.ibm.team.repository.admin.activeServices"

I am interested in looking at users if the connect directly or via Proxy especially with "com.ibm.team.scm.service.internal.content.VersionedContentService.service".

Accepted answer


permanent link
Kevin Ramer (4.5k9186201) | answered Apr 27 '18, 1:44 p.m.

I use Perl and LWP::UserAgent to good effect here.

!/usr/bin/perl


use LWP::UserAgent;
use Data::Dumper;
use JSON;
use Time::HiRes;

if ( scalar(@ARGV) != 1 ) {
print "Usage: $0 JazzURI, JazzUser, JazzPass\n";
exit -1;
}
my ($JazzURI) = @ARGV;
my($JazzUser)="someid"
my($JazzPass) = "passw0rd";

my $Browser = LWP::UserAgent->new;
$Browser->timeout(15);
$Browser->cookie_jar({ file => "$ENV{HOME}/.kcookies.txt" });
$Browser->default_header('Accept' => "text/json");
push @{ $Browser->requests_redirectable }, 'POST';


# Test the connection to CLM
my ( $BeginTime ) = Time::HiRes::time();
$Response = $Browser->post( $JazzURI );
my ( $EndTime ) = Time::HiRes::time();

if ( ! $Response->is_success ) {
$date=date; chomp($date);
print "$date|Connecting to $JazzURI FAILED!\n";
exit -1;
} else {
# my($printString) = sprintf("%s%.2f%s", "Connection to $JazzURI completed in ", $EndTime - $BeginTime, " Seconds.\n");
# print $printString;
}


# Test the Authetication to CLM
my ( $BeginTime ) = Time::HiRes::time();
$Response = $Browser->post( $JazzURI . "/j_security_check", [ j_username => $JazzUser, j_password => $JazzPass ], );
my ( $EndTime ) = Time::HiRes::time();

if ( $Response->{"headers"}{"x-com-ibm-team-repository-web-auth-msg"} eq "authfailed" ) {
print "Authenticating to $JazzURI FAILED!\n";
exit -1;
} else {
# print Dumper($Response);
$d_cookies=$Response->{_request}->{_headers}->{cookie};
$jsess=get_cookie("JSESSIONID",$d_cookies);
$Browser->default_header('X-Jazz-CSRF-Prevent'=>$jsess);
#my($printString) = sprintf("%s%.2f%s%s", "Authentication to $JazzURI completed in ", $EndTime - $BeginTime, " Seconds.\n",$jsess);
#print STDERR $printString;
}

# Test the Database connection status to CLM
my ( $BeginTime ) = Time::HiRes::time();
$Response = $Browser->get( $JazzURI . "/service/com.ibm.team.repository.service.internal.IServerStatusRestService/ActiveServiceInfo");
my ( $EndTime ) = Time::HiRes::time();
my($json) = new JSON;
my($jsonResponse) = $json->decode($Response->content);
# print Dumper($jsonResponse);
# print $json->pretty->encode($jsonResponse);
if ( !exists( $jsonResponse->{"soapenv:Body"}{response}{returnValue}{value}{currentTime} )) {
exit -1;
} else {
$current_time=$jsonResponse->{"soapenv:Body"}{response}{returnValue}{value}{currentTime}/1000;
$ct = scalar localtime($current_time);
$services=$jsonResponse->{"soapenv:Body"}{response}{returnValue}{value}{services};

for ($i=0; exists($services->[$i]); $i++) {
$start_time=$services->[$i]{startTime}/1000;
$st = scalar localtime ($start_time);
$et = int($current_time - $start_time);
print "$ct|$services->[$i]{service}|$services->[$i]{userId}|$services->[$i]{method}|$st|$et\n";
#if ($services->[$i]{method} =~ m/postRenderReport/) {
# print $services->[$i]{stacktrace};
#}
}
# my($printString) = sprintf("%s|%s|%s|%s|%s|%s|%s\n",$url,$sversion,$ut,$tm,$fm,$mm,$db);
# print $printString;
exit 0;
}

sub get_cookie {
my ($name,$cookies)=@
;
@cookees=split /\;/,$cookies;
@which=grep (/$name/,@cookees);
# print join "\n",@which;
($ckey,$cval) = split /=/,$which[0];
$cval
}

This writes out delimitted data to standard out. Hand the program the uri of the server
e.g. https://server.com:port/ctx



Karthik Krishnan selected this answer as the correct answer

Comments
Karthik Krishnan commented Jun 05 '18, 9:23 a.m.

Thank you, Kevin. The script doesn't work for me as it throws this

<noscript><div id="net-jazz-ajax-NoScriptMessage">Javascript is either disabled or not available in your Browser</div></noscript>


I accept this solution as this seems the only way.


Kevin Ramer commented Jun 05 '18, 11:08 a.m.

Did you update the values for $JazzUser, $JazzPass ?   Beyond that how did you execute ?  The 1 argument should be "valid" public url for the target Jazz application.

I've used the above from v3 through 6.0.3 with good success.

Maybe the LWP::UserAgent has some settings to help ( perldoc LWP::UserAgent )


Karthik Krishnan commented Jun 06 '18, 4:07 a.m.

I did update the user name, password and valid URI for sure :). The moment it hits the url, in my case https://clm-server/admin#action=com.ibm.team.repository.admin.activeServices
I get the not authentication error.

I did tried to print the response and i get this

<noscript><div id="net-jazz-ajax-NoScriptMessage">Javascript is either disabled or not available in your Browser</div></noscript>




I even suppressed the SSL certificate in my case

my $Browser = LWP::UserAgent->new(   ssl_opts => { verify_hostname => 0 },);






Karthik Krishnan commented Jun 06 '18, 5:00 a.m.

Interestingly enough it doesn't drop the cookie, meaning the file isn't created. The path is valid and has permissions to create.


Karthik Krishnan commented Jul 10 '18, 8:30 a.m.

turned out that I need to pass the Referer in HEADER for te script to work. I created my own Python script with the url you have mentioned. Thanks for this.

Your answer


Register or to post your answer.


Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.