Skip to Content.
Sympa Menu

perfsonar-dev - [pS-dev] [GEANT/SA2/SA2T3-OPPD] r713 - in trunk: bin etc/oppd-dev etc/oppd.d.example lib/NMWG lib/perfSONAR lib/perfSONAR/Client lib/perfSONAR/MP

Subject: perfsonar development work

List archive

[pS-dev] [GEANT/SA2/SA2T3-OPPD] r713 - in trunk: bin etc/oppd-dev etc/oppd.d.example lib/NMWG lib/perfSONAR lib/perfSONAR/Client lib/perfSONAR/MP


Chronological Thread 
  • From:
  • To:
  • Subject: [pS-dev] [GEANT/SA2/SA2T3-OPPD] r713 - in trunk: bin etc/oppd-dev etc/oppd.d.example lib/NMWG lib/perfSONAR lib/perfSONAR/Client lib/perfSONAR/MP
  • Date: Tue, 21 Jun 2011 11:17:46 +0100

Author: dfn.calim
Date: 2011-06-21 11:17:46 +0100 (Tue, 21 Jun 2011)
New Revision: 713

Added:
trunk/etc/oppd.d.example/lstoolreg.conf
trunk/lib/perfSONAR/MP/LSToolreg.pm
Modified:
trunk/bin/oppd.pl
trunk/etc/oppd-dev/oppd.dev.conf
trunk/lib/NMWG/Message.pm
trunk/lib/perfSONAR/Client/LS.pm
trunk/lib/perfSONAR/MP.pm
Log:
new module LSToolreg for registering tool like owampd or bwctld to Lookup
service added

Modified: trunk/bin/oppd.pl
===================================================================
--- trunk/bin/oppd.pl 2011-05-25 12:01:29 UTC (rev 712)
+++ trunk/bin/oppd.pl 2011-06-21 10:17:46 UTC (rev 713)
@@ -1055,6 +1055,8 @@
close_socket($http_daemon, "Closing listening socket failed");

# Start registration process
+ #print Dumper(%services);
+ $services{"MP/LSToolreg"}->{handler}->run();
perfSONAR::Client::LS::init(services => \%services,
ls_url =>
\@ls_url,
hostname =>
$hostname,

Modified: trunk/etc/oppd-dev/oppd.dev.conf
===================================================================
--- trunk/etc/oppd-dev/oppd.dev.conf 2011-05-25 12:01:29 UTC (rev 712)
+++ trunk/etc/oppd-dev/oppd.dev.conf 2011-06-21 10:17:46 UTC (rev 713)
@@ -219,7 +219,7 @@
# Example:
# keepalive 7200
#
-#keepalive 3600
+keepalive 300


#
@@ -244,6 +244,10 @@
# ls_url
"http://loco4.man.poznan.pl:8180/geant2-java-xml-ls/services/LookupService";
#
ls_url
"http://ls.perfsonar.pionier.net.pl:8180/geant2-java-xml-ls/services/LookupService";
+ls_url "http://psmsu05.aglt2.org:9995/perfSONAR_PS/services/hLS";
+ls_url "http://bby-e-sonar.sfu.ca:8095/perfSONAR_PS/services/hLS";
+#ls_url
"http://perfmonc.cesnet.cz:8070/XML-LS-1.1.2/services/LookupService";
+#ls_url
"http://ls.sonar.net.switch.ch:8180/XML-LS-1.1.1/services/LookupService";

#
# hostname - Host name sent to the Lookup Service.

Copied: trunk/etc/oppd.d.example/lstoolreg.conf (from rev 707,
trunk/etc/oppd.d.example/bwctl.conf)
===================================================================
--- trunk/etc/oppd.d.example/lstoolreg.conf (rev
0)
+++ trunk/etc/oppd.d.example/lstoolreg.conf 2011-06-21 10:17:46 UTC (rev
713)
@@ -0,0 +1,40 @@
+#
+# LSToolreg example configuration
+#
+
+<service MP/LSToolreg>
+
+ #
+ # Necessary parameters for module initialisation
+ #
+ module MP::LSToolreg # Name of module to load
+ servicetype MP # Service type: MP or MA
+
+ #
+ # Module parameters
+ #
+ <module_param>
+ #Define here the tools for registration
+ <bwctld>
+ #
+ # Name, description, and keyword will be reported to Lookup Server
+ # #
+ name "Bandwidth Test Controller"
+ description "Bandwidth Test Controller...."
+ keyword "MDM:MP" #Specify your service by keywords
+ pot "9999" #Port on which is listening tool
+ protocol "tcp" #Give here the protocol of tool e.g. tcp or udp
or http
+ servicetype "MP"
+ </bwctld>
+ <owampd>
+ name "One-Way Ping"
+ description "One-Way Active Measurement Point"
+ keyword "MDM:MP"
+ port "8888"
+ protocol "tcp"
+ servicetype "MP"
+ </owampd>
+ </module_param>
+
+</service MP/LSToolreg>
+

Modified: trunk/lib/NMWG/Message.pm
===================================================================
--- trunk/lib/NMWG/Message.pm 2011-05-25 12:01:29 UTC (rev 712)
+++ trunk/lib/NMWG/Message.pm 2011-06-21 10:17:46 UTC (rev 713)
@@ -439,12 +439,14 @@
return;
}
#return ("Error parsing message: No subject in metadata", $metaid)
if(!@sub_nodes
&&
!@key_nodes);
#TODO
-
+
if (my $metaref= $metanode->getAttribute("metadataIdRef")){
- if($self->{"metadataIDs"}{$metaid}{"subject_ns_uri"} eq
$self->{"metadataIDs"}{$metaref}{"subject_ns_uri"}){
+ #i2 and GEANT response is different for LS
+ if ( $metanode->getAttribute("metadataIdRef") eq "serviceLookupInfo"){
+ #TODO check this for LS
+ }elsif($self->{"metadataIDs"}{$metaid}{"subject_ns_uri"} eq
$self->{"metadataIDs"}{$metaref}{"subject_ns_uri"}){
$self->{"metadataIDs"}{$metaid}{"metaref"}=$metaref;
- }
- else {
+ }else {
return ("Metadata $metaid and $metaref have subjects with different
namespaces.");
}
}

Modified: trunk/lib/perfSONAR/Client/LS.pm
===================================================================
--- trunk/lib/perfSONAR/Client/LS.pm 2011-05-25 12:01:29 UTC (rev 712)
+++ trunk/lib/perfSONAR/Client/LS.pm 2011-06-21 10:17:46 UTC (rev 713)
@@ -70,14 +70,14 @@

our %services = ();
our (
- $hostname, $port, $organization, $contact, $log,
+ $hostname, $port, $organization, $contact, $log,$protocol
);

our @ls_url = ();
my %messages;
+my $reg_services ={};
+my $debug_write = 0;

-my $debug_write = 1;
-
# Setup everything und sent initial registration ("first" heartbeat).
sub init {
my %p = @_;
@@ -85,45 +85,64 @@
$hostname = $p{hostname}; $port = $p{port};
$organization = $p{organization}; $contact = $p{contact};
$log = $p{log};
-
+ $protocol = "http"; #Default
+
#first registration:
foreach my $service (keys %services){
- create_register_message($service);
- send_registration($messages{$service}{"register_msg"}, $service);
+ if ($service =~ /LSToolreg/){
+ my %modparam =
%{$services{$service}->{'handler'}->{MODPARAM}};
+ foreach my $tool (keys %modparam){
+ #register tool only if availible
+ if
($services{$service}->{'handler'}->{MODPARAM}->{$tool}->{REGTOOL} eq "yes"){
+ $services{$service}->{'name'} =
$modparam{$tool}{'name'};
+ $services{$service}->{'servicetype'} =
$modparam{$tool}{'servicetype'};
+ $services{$service}->{'description'} =
$modparam{$tool}{'description'};
+ $protocol = $modparam{$tool}{'protocol'};
+ $port = $modparam{$tool}{'port'};
+ create_register_message($service);
+
send_registration($messages{$service}{"register_msg"}, $service, $tool);
+ }
+ }
+
+ }else{
+ create_register_message($service);
+ send_registration($messages{$service}{"register_msg"},
$service);
+ }
}
}


# Send keepalive messages for each service
sub heartbeat {
- foreach my $service (keys %messages){ #get services from global hash
- my $message;
- if (exists $messages{$service}{"keepalive_msg"}){
- foreach my $url (@ls_url){
- $message = $messages{$service}{"keepalive_msg"}->clone();
- $log->info("Sending keepalive for $service to $url");
- my $response = perfSONAR::sendReceive(
- message => $message,
- uri => $url,
- );
- if ($response){
- write_message($response, "keepalive-response");
- #TODO What to do if keepalive fails? At the moment: Nothing.
- my $eventtype = ($response->{dom}->getElementsByTagNameNS("$nmwg",
"eventType"))[0]->textContent;
- my $datumstring =
($response->{dom}->getElementsByTagNameNS("$nmwgr", "datum"))[0]->textContent;
- $log->info("Keepalive for $service returend $eventtype:
$datumstring");
- } else { #no response...
- $log->info("error sending keepalive for $service: No response from
Lookup Server!");
- }
- }
- } else { #something went wrong with first registration, otherwise there
would be a keepalive message!
- #try to send registration message again:
- send_registration($messages{$service}{"register_msg"}, $service);
- }
- }
-}
+
+ if ($reg_services){
+ foreach my $service (keys %{$reg_services}){ #get services
from global hash
+ my $message;
+ foreach my $url (keys %{$reg_services->{$service}}){
+ if (exists
$reg_services->{$service}->{$url}->{KEEPALIVEMSG}){
+ $message =
$reg_services->{$service}->{$url}->{KEEPALIVEMSG}->clone();

+ $log->info("Sending keepalive for
$service to $url");
+ my $response = perfSONAR::sendReceive(
+ message => $message,
+ uri => $url,
+ );
+ if ($response){
+ write_message($response,
"keepalive-response");
+ #TODO What to do if keepalive fails?
At the moment: Nothing.
+ my $eventtype =
($response->{dom}->getElementsByTagNameNS("$nmwg",
"eventType"))[0]->textContent;
+ my $datumstring =
($response->{dom}->getElementsByTagNameNS("$nmwgr", "datum"))[0]->textContent;
+ $log->info("Keepalive for $service
returend $eventtype: $datumstring");
+ } else { #no response...
+ $log->errot("Sending keepalive for
$service: No response from Lookup Server!");
+ }
+ }#End if exist
+ }#eND FORECH $url
+ }#End foreach $service
+ }#End if$reg_services
+}

+
sub create_register_message{
my $service = shift;

@@ -132,9 +151,13 @@
my $message = NMWG::Message->new();
$message->parse_xml_from_file($register_template);
my $servicenode = ($message->{dom}->getElementsByTagNameNS("$psservice",
"service"))[0];
-
+
$message->add_element_NS($servicenode, "serviceName",
"$services{$service}->{name}", $psservice);
- $message->add_element_NS($servicenode, "accessPoint",
"http://$hostname:$port/services/$service";, $psservice);
+ if ($service =~ /LSToolreg/){
+ $message->add_element_NS($servicenode, "accessPoint",
"$protocol://$hostname:$port", $psservice);
+ }else{
+ $message->add_element_NS($servicenode, "accessPoint",
"http://$hostname:$port/services/$service";, $psservice);
+ }
$message->add_element_NS($servicenode, "serviceType",
"$services{$service}->{servicetype}", $psservice);
$message->add_element_NS($servicenode, "serviceDescription",
"$services{$service}->{description}", $psservice);

@@ -217,17 +240,18 @@
sub check_response {
my $response = shift;
my $service = shift;
-
-
+
my ($errorstring, $metaid) = $response->parse_all;
if($errorstring){
- $log->log(level => "notice", service => $service, message =>
$errorstring);
+ $log->error($errorstring);
}
#parse content, write to log if successfull registration or error happened
my $eventtype;
my $key;
foreach my $meta (keys %{$response->{"metadataIDs"}}){
- $eventtype = $response->{"metadataIDs"}{$meta}{"eventType"};
+ next if ($meta eq "serviceLookupInfo");
+ $eventtype = $response->{"metadataIDs"}{$meta}{"eventType"};
+
if (!$eventtype =~ /success/){
$log->info("LS returned $eventtype for service $service");
#return;
@@ -257,10 +281,20 @@

my $message = shift;
my $service = shift;
+ my $tool = "";
+
+ if (@_){
+ $tool = shift;
+ }

write_message($message, "register");
foreach my $url (@ls_url){
- $log->info("registering service $service to $url");
+ if ($tool){
+ $log->info("registering service $service -> $tool to $url");
+ }else{
+ $log->info("registering service $service to $url");
+ }
+
my $response = perfSONAR::sendReceive(
message => $message->clone,
uri => $url,
@@ -269,14 +303,16 @@
write_message($response, "register-response");
my $key = check_response($response, $service);
if ($key){
- $messages{$service}{"keepalive_msg"} =
create_keepalive_message($key);
+ $reg_services->{$service}->{$url}->{LSKEY} = $key;
+ $reg_services->{$service}->{$url}->{KEEPALIVEMSG} =
create_keepalive_message($key);
} else {
my $eventtype = ($response->{dom}->getElementsByTagNameNS("$nmwg",
"eventType"))[0]->textContent;
my $datumstring =
($response->{dom}->getElementsByTagNameNS("$nmwgr", "datum"))[0]->textContent;
$log->error("error registering service $service with $eventtype:
$datumstring");
}
} else {
- $log->eroor("error registering service $service: No response from
Lookup Server!");
+ #TODO should we delete this url
+ $log->error("error registering service $service: No response from
Lookup Server!");
}
}
}
@@ -285,45 +321,41 @@

sub deregister{

- #read in deregistration template:
- my $message = NMWG::Message->new();
- $message->parse_xml_from_file($deregister_template);
#send deregistration
- foreach my $service (keys %messages){
- my $key = $messages{$service}{"ls_key"};
- if (!$key){
- $log->error("no key for deregistering service $service found!");
- next;
- }
-
- my $deregmsg = $message->clone;
- my $parametersnode = (
- $deregmsg->{dom}->getElementsByTagNameNS("$nmwg", "parameters")
- )[0];
- my $key_parameter = $deregmsg->add_attribute(
+ if ($reg_services){
+ #read in deregistration template:
+ my $message = NMWG::Message->new();
+ $message->parse_xml_from_file($deregister_template);
+
+ foreach my $service (keys %{$reg_services}){
+ my $deregmsg = $message->clone;
+ my $parametersnode = (
+ $deregmsg->{dom}->getElementsByTagNameNS("$nmwg",
"parameters")
+ )[0];
+ my $key_parameter = $deregmsg->add_attribute(
parent => $parametersnode,
nodename => "parameter",
name => "lsKey"
- );
- $key_parameter->appendText($key);
- write_message($deregmsg, "deregister");
-
- foreach my $url (@ls_url){
- $log->info("deregistering service $service from $url");
- my $response = perfSONAR::sendReceive(
- message => $deregmsg->clone,
- uri => $url,
- );
-
- if ($response){
- write_message($response, "dereg-response");
- $log->info("successfully deregistered service $service with key
$key");
- #TODO do something interesting with result
- #$response->parse_meta;
- #$response->parse_data;
- } else {
- $log->info("could not deregister $key: No response from Looukup
Server!");
- }
+ );
+ foreach my $url (keys %{$reg_services->{$service}}){
+ my $key = $reg_services->{$service}->{$url}->{LSKEY};
+ $key_parameter->appendText($key);
+ write_message($deregmsg, "deregister");
+ $log->info("deregistering service $service from
$url");
+ my $response = perfSONAR::sendReceive(
+ message => $deregmsg->clone,
+ uri => $url,
+ );
+ if ($response){
+ write_message($response, "dereg-response");
+ $log->info("successfully deregistered service
$service with key $key");
+ #TODO do something interesting with result
+ #$response->parse_meta;
+ #$response->parse_data;
+ } else {
+ $log->info("could not deregister $key: No response
from Looukup Server!");
+ }
+ }#End forech my $url
}
}
#lay down to die

Added: trunk/lib/perfSONAR/MP/LSToolreg.pm
===================================================================
--- trunk/lib/perfSONAR/MP/LSToolreg.pm (rev 0)
+++ trunk/lib/perfSONAR/MP/LSToolreg.pm 2011-06-21 10:17:46 UTC (rev 713)
@@ -0,0 +1,107 @@
+package perfSONAR::MP::LSToolreg;
+#
+# Copyright 2010 Verein zur Foerderung eines Deutschen Forschungsnetzes e.
V.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+
+#TODO
+# - Please make me a proper class! There should be an object for every
service
+# and this class brings everything together.
+# - Replace the usage of $log with something more useful.
+
+use strict;
+use warnings;
+
+#DEBUG
+use Data::Dumper;
+#/DEBUG
+use Config::General qw(ParseConfig SaveConfig SaveConfigString);
+use base qw(perfSONAR::MP);
+
+=head1 NAME
+
+perfSONAR::MP::LSToolreg - Module for registering lokal tools on a Lookup
service
+
+=head1 SYNOPSIS
+
+use perfSONAR::MP::LSToolreg;
+my $lstoolreg = perfSONAR::MP::LSToolreg->new();
+$lstoolreg->run();
+
+=head1 DESCRIPTION
+
+if you want to register local tools on you host like nwctld on a lookup
service
+so use this modul for registering.
+=cut
+
+=head2 run()
+start this method to start this module
+=cut
+sub run{
+ my $self = shift;
+
+ #Define default
+ $self->{DEFAULT}->{PORT}->{'bwctld'} = "4823";
+ $self->{DEFAULT}->{PORT}->{'owampd'} = "861";
+
+ #look if tools are availible
+ foreach my $tool (keys %{$self->{MODPARAM}}){
+ #look if tool is running
+ my @res = $self->checkToolisrunning($tool);
+ if ($res[1] eq "success"){
+ #set tool is availible
+ $self->{MODPARAM}->{$tool}->{REGTOOL} = "yes";

+
+ #read conf file for information
+ my $confdir = $self->{MODPARAM}->{$tool}->{'confdir'};
+ if ($confdir){
+ my $conffile = $confdir . "/" . $tool .
".conf";
+ $self->{LOGGER}->info("Opening: $conffile");
+ my $conf = new Config::General($conffile);
+ my %config = $conf->getall;
+ #Get options for bwctld
+ if ($tool eq 'bwctld'){
+ if ($config{'src_node'}){
+ my @src_node = split(/:/,
$config{'src_node'});
+ #get port src_node is
host:port
+
$self->{MODPARAM}->{$tool}->{'host'} = $src_node[0];
+
$self->{MODPARAM}->{$tool}->{'port'} = $src_node[1];
+ }else{
+ $self->{LOGGER}->warn("Source
node is not set in config file. Using defaul values");
+
$self->{MODPARAM}->{$tool}->{'port'} = $self->{DEFAULT}->{PORT}->{$tool};
+ }
+ }elsif ($tool eq 'owampd'){
+ if ($config{'srcnode'}){
+ my @src_node = split(/:/,
$config{'srcnode'});
+ #get port src_node is
host:port
+
$self->{MODPARAM}->{$tool}->{'host'} = $src_node[0];
+
$self->{MODPARAM}->{$tool}->{'port'} = $src_node[1];
+ }else{
+ $self->{LOGGER}->warn("Source
node is not set in config file. Using defaul values");
+
$self->{MODPARAM}->{$tool}->{'port'} = $self->{DEFAULT}->{PORT}->{$tool};
+ }
+ }
+ }else{
+ $self->{MODPARAM}->{$tool}->{REGTOOL} = "no";
+ $self->{LOGGER}->warn("Cant open or find
config filel");
+ }
+ }else{
+ $self->{MODPARAM}->{$tool}->{REGTOOL} = "no";
+ $self->{LOGGER}->warn("Tool: $tool is not running not
registering tool");
+ }
+ }
+
+}
+1;
\ No newline at end of file

Modified: trunk/lib/perfSONAR/MP.pm
===================================================================
--- trunk/lib/perfSONAR/MP.pm 2011-05-25 12:01:29 UTC (rev 712)
+++ trunk/lib/perfSONAR/MP.pm 2011-06-21 10:17:46 UTC (rev 713)
@@ -103,17 +103,19 @@
my ($class,%module_param) = @_;
my $self = {};
$self->{LOGGER} = get_logger(__PACKAGE__);
- $self->{COMMAND} = $module_param{command};
- my $ret = `which $self->{COMMAND} 2>/dev/null`;
- if ( length $ret <= 0 ){
- my @errmsg;
- push @errmsg, "ERROR:";
- push @errmsg, "command:", $self->{COMMAND} ;
- push @errmsg, "not found. Please install it!";
- $self->{LOGGER}->error("@errmsg");
- die "@errmsg";
+ if (exists $module_param{command}){
+ $self->{COMMAND} = $module_param{command};
+ my $ret = `which $self->{COMMAND} 2>/dev/null`;
+ if ( length $ret <= 0 ){
+ my @errmsg;
+ push @errmsg, "ERROR:";
+ push @errmsg, "command:", $self->{COMMAND} ;
+ push @errmsg, "not found. Please install it!";
+ $self->{LOGGER}->error("@errmsg");
+ die "@errmsg";
+ }
}
- $self->{MODPARAM} = %module_param;
+ $self->{MODPARAM} = \%module_param;
bless $self, $class;
return $self;
}



  • [pS-dev] [GEANT/SA2/SA2T3-OPPD] r713 - in trunk: bin etc/oppd-dev etc/oppd.d.example lib/NMWG lib/perfSONAR lib/perfSONAR/Client lib/perfSONAR/MP, svn-noreply, 06/21/2011

Archive powered by MHonArc 2.6.16.

Top of Page