perfsonar-dev - perfsonar: r5035 - branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice
Subject: perfsonar development work
List archive
perfsonar: r5035 - branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice
Chronological Thread
- From:
- To:
- Subject: perfsonar: r5035 - branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice
- Date: Fri, 6 Mar 2009 10:22:12 -0500
Author: mac
Date: 2009-03-06 10:22:11 -0500 (Fri, 06 Mar 2009)
New Revision: 5035
Added:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupSchedulerAction.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupServiceEngine.java
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/DiscoveryQueryGenerator.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/EchoServiceEngine.java
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSKeepaliveServiceEngine.java
Log:
Echo and SelfTest
LSCleanup added (as service engine and action for scheduler)
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/DiscoveryQueryGenerator.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/DiscoveryQueryGenerator.java
2009-03-06 15:20:27 UTC (rev 5034)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/DiscoveryQueryGenerator.java
2009-03-06 15:22:11 UTC (rev 5035)
@@ -8,26 +8,36 @@
/**
* Discovery Query Generator
+ *
* @author Maciej Glowiak
- *
+ *
*/
public class DiscoveryQueryGenerator {
-
+
private Element discoverySubject = null;
+
private boolean extracted = false;
-
+
HashSet<String> ipAddresses = new HashSet<String>();
+
HashSet<String> domains = new HashSet<String>();
+
HashSet<String> eventTypes = new HashSet<String>();
+
HashSet<String> keywords = new HashSet<String>();
-
+
String query = null;
-
+
+
+
public DiscoveryQueryGenerator(Element subject) {
+
setSubject(subject);
}
+
public void setSubject(Element discoverySubject) {
+
this.discoverySubject = discoverySubject;
extracted = false;
ipAddresses.clear();
@@ -35,58 +45,63 @@
eventTypes.clear();
keywords.clear();
}
-
-
+
+
public void extractSubject() throws PerfSONARException {
- if (discoverySubject == null) throw new PerfSONARException("No
subject");
+
+ if (discoverySubject == null)
+ throw new PerfSONARException("No subject");
if (!extracted) {
-
+
for (Element e : discoverySubject.getChildren()) {
- String elementName = e.getName() ;
- if (elementName .equals("address")) {
+ String elementName = e.getName();
+ if (elementName.equals("address")) {
addIpAddress(e);
-
+
} else if (elementName.equals("domain")) {
addDomain(e);
-
+
} else if (elementName.equals("eventType")) {
- addEventType(e);
-
+ addEventType(e);
+
} else if (elementName.equals("parameters")) {
-
+
for (Element p : e.getChildren("parameter")) {
-
+
String name = p.getAttribute("name");
String val = p.getAttribute("value");
-
- if (val!=null) {
+
+ if (val != null) {
val = val.trim();
if ("keyword".equals(name))
keywords.add(val);
else if ("eventType".equals(name))
eventTypes.add(val);
- } //if
-
- } //for
- } //else
- }//for
+ } // if
+
+ } // for
+ } // else
+ }// for
}
extracted = true;
}
-
+
+
private void addEventType(Element eventType) {
+
String evt = eventType.getText();
- if (evt!=null) {
+ if (evt != null) {
eventTypes.add(evt.trim());
}
}
+
private void addDomain(Element domain) {
Element name = domain.getFirstChild("name");
- if (name!=null) {
+ if (name != null) {
String n = name.getName();
- if (n!=null)
+ if (n != null)
domains.add(n.trim());
}
}
@@ -94,73 +109,91 @@
private void addIpAddress(Element ipAddress) {
String ip = ipAddress.getText();
- if (ip!=null) {
+ if (ip != null) {
ipAddresses.add(ip.trim());
}
}
-
+
/**
* Generates query and stores to query property
+ *
* @return
- * @throws PerfSONARException
+ * @throws PerfSONARException
*/
public String generateQuery() throws PerfSONARException {
-
- if (!extracted) extractSubject();
-
+
+ if (!extracted)
+ extractSubject();
+
StringBuffer q = new StringBuffer();
- //add declarations
- q.append("declare namespace nmwg='http://ggf.org/ns/nmwg/base/2.0/';
\n");
- q.append("declare namespace
nmwgt='http://ggf.org/ns/nmwg/topology/2.0/'; \n");;
+ // add declarations
+ q
+ .append("declare namespace
nmwg='http://ggf.org/ns/nmwg/base/2.0/'; \n");
+ q
+ .append("declare namespace
nmwgt='http://ggf.org/ns/nmwg/topology/2.0/'; \n");
+ ;
- //add for expression
- q.append("for $d in
/nmwg:store[@type='LSStore']/nmwg:data
\n");
- if ((ipAddresses.size() + domains.size() + keywords.size() +
eventTypes.size()) > 0) {
+ // add for expression
+ q.append("for $d in
/nmwg:store[@type='LSStore']/nmwg:data
\n");
+ if ((ipAddresses.size() + domains.size() + keywords.size() +
eventTypes
+ .size()) > 0) {
- //generate query conditions
- q.append("where \n");
+ // generate query conditions
+ q.append("where \n");
- int i=0;
- i += putCollectionToQueryBuffer(q, ipAddresses,
"$d/nmwg:metadata//nmwgt:ifAddress", (i>0), null);
- i += putCollectionToQueryBuffer(q, domains,
"$d/nmwg:metadata//nmwgt:hostName", (i>0), "ends-with");
- i += putCollectionToQueryBuffer(q, eventTypes,
"$d/nmwg:metadata/nmwg:eventType", (i>0), null);
- i += putCollectionToQueryBuffer(q, keywords,
"$d/nmwg:metadata//nmwg:parameter[@name='keyword']",
(i>0), null);
+ int i = 0;
+ i += putCollectionToQueryBuffer(q, ipAddresses,
+ "$d/nmwg:metadata//nmwgt:ifAddress", (i > 0), null);
+ i += putCollectionToQueryBuffer(q, domains,
+ "$d/nmwg:metadata//nmwgt:hostName", (i > 0),
"ends-with");
+ i += putCollectionToQueryBuffer(q, eventTypes,
+ "$d/nmwg:metadata/nmwg:eventType", (i > 0), null);
+ i += putCollectionToQueryBuffer(q, keywords,
+
"$d/nmwg:metadata//nmwg:parameter[@name='keyword']",
+ (i > 0), null);
}
- //add return statemet
- q.append("return data($d/@metadataIdRef)");
+ // add return statemet
+ q.append("return data($d/@metadataIdRef)");
query = q.toString();
return query;
-
+
}
-
+
/**
- * Makes AND/OR query
- * @param q buffer to be appended
- * @param col collection where to take data from
- * @param element name of an element to be checked
- * @param addAND indicates whether to add AND at the beginning of the
expression
- * @param function name of function, if null then equal "=" will be used
+ * Makes AND/OR query
+ *
+ * @param q
+ * buffer to be appended
+ * @param col
+ * collection where to take data from
+ * @param element
+ * name of an element to be checked
+ * @param addAND
+ * indicates whether to add AND at the beginning of the
+ * expression
+ * @param function
+ * name of function, if null then equal "=" will be used
* @return number of elements added
*/
- private int putCollectionToQueryBuffer(
- StringBuffer q,
- Collection<String> col,
- String element,
- boolean addAND,
+ private int putCollectionToQueryBuffer(StringBuffer q,
+ Collection<String> col, String element, boolean addAND,
String function) {
- if ((col.size()>0) && (addAND==true)) q.append(" and \n");
-
- int i=0;
+ if ((col.size() > 0) && (addAND == true))
+ q.append(" and \n");
+
+ int i = 0;
for (String c : col) {
- if (i==0) q.append("(");
- else q.append(" or ");
- if (function==null) {
+ if (i == 0)
+ q.append("(");
+ else
+ q.append(" or ");
+ if (function == null) {
q.append(" ");
q.append(element);
q.append(" = '");
@@ -177,15 +210,20 @@
}
i++;
}
- if (i>0) q.append(")\n");
+ if (i > 0)
+ q.append(")\n");
return i;
-
+
}
-
-
-
-
+
+
+ /**
+ * Returns formatted query parameters string in string buffer
+ *
+ * @return
+ */
public StringBuffer printQueryParameters() {
+
StringBuffer sb = new StringBuffer();
sb.append("Discovery Query Parameters\n");
sb.append("==================================================\n");
@@ -203,10 +241,10 @@
sb.append("==================================================\n");
return sb;
}
-
-
+
+
public String getQuery() {
-
+
return query;
}
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/EchoServiceEngine.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/EchoServiceEngine.java
2009-03-06 15:20:27 UTC (rev 5034)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/EchoServiceEngine.java
2009-03-06 15:22:11 UTC (rev 5035)
@@ -1,70 +1,367 @@
package org.perfsonar.service.lookupservice;
+import org.apache.log4j.Logger;
import org.perfsonar.base2.service.exceptions.PerfSONARException;
import org.perfsonar.base2.service.requesthandler.ServiceEngine;
import org.perfsonar.base2.service.requesthandler.ServiceMessage;
import org.perfsonar.base2.service.util.ResultCodesUtil;
+import org.perfsonar.base2.xml.Element;
+import org.perfsonar.base2.xml.nmwg.Data;
+import org.perfsonar.base2.xml.nmwg.EventType;
import org.perfsonar.base2.xml.nmwg.Message;
+import org.perfsonar.base2.xml.nmwg.Metadata;
+import org.perfsonar.service.lookupservice.storage.LookupServiceDAO;
-import org.apache.log4j.Logger;
+/**
+ * Handling EchoRequest
+ * for Echo (Ping) and SelfTest
+ *
+ * @author Maciej Glowiak
+ *
+ */
+public class EchoServiceEngine extends GenericLSServiceEngine implements
+ ServiceEngine {
+ private static final Logger logger = Logger
+ .getLogger(EchoServiceEngine.class.getName());
-public class EchoServiceEngine extends GenericLSServiceEngine implements
ServiceEngine {
+ public final static String[] SUPPORTED_SELFTEST_EVENT_TYPES = {
+ "http://schemas.perfsonar.net/tools/admin/echo/ls/2.0",
+ "http://schemas.perfsonar.net/tools/admin/selftest/1.0" };
+ public final static String[] SUPPORTED_ECHO_EVENT_TYPES = {
"http://schemas.perfsonar.net/tools/admin/echo/2.0", };
- private static final Logger logger =
Logger.getLogger(EchoServiceEngine.class.getName());
+ /**
+ * Constructor
+ * @throws PerfSONARException
+ */
+ public EchoServiceEngine() throws PerfSONARException {
-
- protected EchoServiceEngine() throws PerfSONARException {
-
super();
}
- public final static String SUPPORTED_EVENT_TYPE =
- "http://schemas.perfsonar.net/tools/admin/echo/2.0";
-
- public final static String SUCCESS_CODE = "success/echo";
- public final static String ERROR_CODE = "error/eventtype_not_supported";
- //
-----------------------------------------------------------------------
-
- public void takeAction(ServiceMessage serviceRequest, ServiceMessage
serviceResponse) throws PerfSONARException {
+ /**
+ * Tests whether eventType is echo
+ *
+ * @param evt
+ * @return true if selftest
+ */
+ private boolean isSelfTestEventTypeSupported(String evt) {
- //extract message
+ boolean i = false;
+ for (String s : SUPPORTED_SELFTEST_EVENT_TYPES) {
+ if (s.equals(evt)) {
+ i = true;
+ break;
+ }
+ if ((s + "/").equals(evt)) {
+ i = true;
+ break;
+ }
+ }
+ return i;
+ }
+
+
+ /**
+ * Tests whether eventType is echo
+ *
+ * @param evt
+ * @return true if echo
+ */
+ private boolean isEchoEventTypeSupported(String evt) {
+
+ boolean i = false;
+ for (String s : SUPPORTED_ECHO_EVENT_TYPES) {
+ if (s.equals(evt)) {
+ i = true;
+ break;
+ }
+ if ((s + "/").equals(evt)) {
+ i = true;
+ break;
+ }
+ }
+ return i;
+ }
+
+
+ /**
+ * Prints event Types (for result code message)
+ *
+ * @return
+ */
+ private String getEventTypesString() {
+
+ StringBuffer sb = new StringBuffer();
+ int j = 0;
+ for (int i = 0; i < SUPPORTED_ECHO_EVENT_TYPES.length; i++) {
+ if (j > 0)
+ sb.append(" | ");
+ sb.append(SUPPORTED_ECHO_EVENT_TYPES[i]);
+ j++;
+ }
+ for (int i = 0; i < SUPPORTED_SELFTEST_EVENT_TYPES.length; i++) {
+ if (j > 0)
+ sb.append(" | ");
+ sb.append(SUPPORTED_SELFTEST_EVENT_TYPES[i]);
+ j++;
+ }
+ return sb.toString();
+ }
+
+
+ public void takeAction(ServiceMessage serviceRequest,
+ ServiceMessage serviceResponse) throws PerfSONARException {
+
+ // extract message
Message request = serviceRequest.getMessageElement();
-
+
logger.debug("Echo Service Engine started");
-
- String eventType = extractEventType(request);
-
- //if eventType is supported - return success/echo
-
- //error - eventType not supported
- if (eventType == null) {
- throw new PerfSONARException(ERROR_CODE,
- "eventType for EchoRequest not found");
- } else {
-
- if (SUPPORTED_EVENT_TYPE.equals(eventType)) {
- Message response = new Message();
- ResultCodesUtil.generateResultMessage(response,
- new PerfSONARException(
- SUCCESS_CODE,
- "This is successful echo response from the
service"));
- //exit with success
- serviceResponse.setElement(response);
-
- } else
- throw new PerfSONARException(ERROR_CODE,
- "eventType ["+eventType+"] not supported. Must be ["
- +SUPPORTED_EVENT_TYPE+"].");
+ // get metadata to exctract parameters
+ Metadata metadata = getFirstMetadataFromRequest(request);
+ boolean selftest = false;
+ boolean echo = false;
+ String eventType = null;
+
+ try {
+ // check eventtype
+ eventType = metadata.getFirstEventType().getEventType();
+ selftest = isSelfTestEventTypeSupported(eventType);
+ echo = isEchoEventTypeSupported(eventType);
+
+ if (!selftest && !echo)
+ throw new PerfSONARException(
+ "error/ls/eventtype_not_supported",
+ "LS EchoRequest error: " + "Not supported event type
["
+ + eventType + "]. " + "Must be: ["
+ + getEventTypesString() + "]");
+
+ } catch (RuntimeException ex) {
+ throw new PerfSONARException(
+ "error/ls/no_eventtype",
+ "LS EchoRequest error: "
+ + "Error while determining eventType (possibly
no eventType at all). "
+ + "EventType must be [" + getEventTypesString()
+ + "]. " + "Nested exception is : "
+ + ex.getMessage());
}
-
-
-
- } //end
+ // Take action
+ Message msg = null;
-}
+ // ECHO
+ if (echo) {
+ logger.debug("Taking ECHO action");
+ msg = takeEchoAction(serviceRequest);
+ }
+
+ // or SELFTEST
+ else if (selftest) {
+ msg = takeSelfTestAction(serviceRequest);
+ logger.debug("Taking ECHO action");
+ } else
+ throw new PerfSONARException("error/ls/no_eventtype",
+ "Cannot take selftest or echo action.");
+
+ // exit with success
+ serviceResponse.setElement(msg);
+ }
+
+
+ /**
+ * Sub action for SelfTest
+ *
+ * @param serviceRequest
+ * @return
+ * @throws PerfSONARException
+ */
+ public Message takeSelfTestAction(ServiceMessage serviceRequest)
+ throws PerfSONARException {
+
+ // create request
+ Message msg = new Message();
+ msg.setId("EchoResponse");
+
+ Metadata meta = new Metadata("result-code-metadata", "nmwg");
+ EventType evt = new EventType(
+ "http://schemas.perfsonar.net/tools/admin/selftest/1.0",
"nmwg");
+ meta.addChild(evt);
+
+ Data data = new Data("result-code-data", "result-code", "nmwg");
+ data.setMetadataIdRef("result-code-metadata");
+
+ Element datum = new Element("datum", "nmwgr",
+ "http://ggf.org/ns/nmwg/result/2.0/");
+ data.addChild(datum);
+
+ msg.addChild(meta);
+ msg.addChild(data);
+
+ // test db connectivity - add
+ testDBConnectivity(data);
+
+ // test db collection LSStore
+ testDBCollectionStore(data);
+
+ // test db collection LSStore-control
+ testDBCollectionControl(data);
+
+ return msg;
+ }
+
+ /**
+ * Tests whether there is LSStore-control collection
+ * @param data to be filled with result code
+ */
+ private void testDBCollectionControl(Data data) {
+
+ boolean test;
+ String s;
+ test = false;
+ s = "";
+ try {
+ test = dao
+
.isDBCollection(LookupServiceDAO.LS_STORE_CONTROL_COLLECTION_TYPE); // returns
+ // true
+ // if
+ // so,
+ // or
+ // exception
+ } catch (Exception ex) {
+ test = false;
+ s = ex.getMessage();
+ }
+ if (test)
+ addResultCode(data, "exist-db-collection-store-control",
+ "success.ls.selftest.collection.lsstore-control",
+ "collection LSStore-control exists and is accessible");
+ else
+ addResultCode(data, "exist-db-collection-store-control",
+ "error/ls/selftest.collection.lsstore-control",
+ "collection LSStore-control does not exist or is not
accessible: "
+ + s);
+ }
+
+ /**
+ * Tests whether there is LSStorecollection
+ * @param data to be filled with result code
+ */
+ private void testDBCollectionStore(Data data) {
+
+ boolean test;
+ String s;
+ test = false;
+ s = "";
+ try {
+ test = dao
+
.isDBCollection(LookupServiceDAO.LS_STORE_COLLECTION_TYPE); // returns
+ // true
+ // if
+ // so,
+ // or
+ // exception
+ } catch (Exception ex) {
+ test = false;
+ s = ex.getMessage();
+ }
+ if (test)
+ addResultCode(data, "exist-db-collection-store",
+ "success.ls.selftest.collection.lsstore",
+ "collection LSStore exists and is accessible");
+ else
+ addResultCode(data, "exist-db-collection-store",
+ "error/ls/selftest.collection.lsstore",
+ "collection LSStore does not exist or is not accessible:
"
+ + s);
+ }
+
+ /**
+ * Tests whether there is connectivity with DB
+ * @param data to be filled with result code
+ */
+ private void testDBConnectivity(Data data) {
+
+ boolean test;
+ String s;
+ test = false;
+ s = "";
+ try {
+ test = dao.isDBConnectivity(); // returns true if so, or
exception
+ } catch (Exception ex) {
+ test = false;
+ s = ex.getMessage();
+ }
+ if (test)
+ addResultCode(data, "exist-db-connectivity",
+ "success.ls.selftest.dbconnectivity",
+ "eXist DB connection established");
+ else
+ addResultCode(data, "exist-db-connectivity",
+ "error/ls/selftest.dbconnectivity",
+ "eXist DB connection not working: " + s);
+ }
+
+
+ /**
+ * Sub action for Echo
+ *
+ * @param serviceRequest
+ * @return
+ * @throws PerfSONARException
+ */
+ public Message takeEchoAction(ServiceMessage serviceRequest)
+ throws PerfSONARException {
+
+ Message msg = ResultCodesUtil.generateResultMessage(null,
+ "success/echo", "Echo - ping succeeded");
+ return msg;
+ }
+
+
+ /**
+ * Adds sub result code to the selftest data element
+ *
+ * @param incomingData
+ * @param name
+ * @param code
+ * @param desc
+ */
+ private void addResultCode(Data incomingData, String name, String code,
+ String desc) {
+
+ // <!-- metadata/data block for result of first test -->
+
+ // <nmwg:metadata id="bwctl_command_test">
+ //
<nmwg:eventType>http://schemas.perfsonar.net/tools/admin/selftest/MP/BWCTL/bwctl_command_test/success/1.0</nmwg:eventType>
+ // </nmwg:metadata>
+ //
+ // <nmwg:data id="data_bwctl_command_test"
+ // metadataIdRef="bwctl_command_test">
+ // <nmwg:datum>BWCTL tool /usr/local/bin/bwctl found
</nmwg:datum>
+ // </nmwg:data>
+
+ Metadata meta = new Metadata();
+ meta.setId(name);
+
+ EventType evt = new EventType();
+ evt.setEventType(code);
+ meta.setEventType(evt);
+ incomingData.addChild(meta);
+
+ Data data = new Data();
+ data.setId(name + "-data");
+ data.setMetadataIdRef(name);
+
+ Element datum = new Element("datum", "nmwgr",
+ "http://ggf.org/ns/nmwg/result/2.0/");
+ datum.setText(desc);
+ data.addChild(datum);
+
+ incomingData.addChild(data);
+ }
+
+} // EchoRequestAction
Added:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupSchedulerAction.java
Added:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSCleanupServiceEngine.java
Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSKeepaliveServiceEngine.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSKeepaliveServiceEngine.java
2009-03-06 15:20:27 UTC (rev 5034)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/LSKeepaliveServiceEngine.java
2009-03-06 15:22:11 UTC (rev 5035)
@@ -7,81 +7,107 @@
import org.perfsonar.base2.xml.nmwg.Message;
import org.perfsonar.base2.xml.nmwg.Metadata;
-
/**
* KEEPALIVE - register/keepalive Action
*
* @author Maciej Glowiak
- *
+ *
*/
-public class LSKeepaliveServiceEngine extends LSGenericRegisterServiceEngine
{
-
-
+public class LSKeepaliveServiceEngine extends LSGenericRegisterServiceEngine
{
+
// --------------------------------------------------------------
Constants
- private static final Logger logger =
Logger.getLogger(LSKeepaliveServiceEngine.class.getName());
-
+
+ private static final Logger logger = Logger
+ .getLogger(LSKeepaliveServiceEngine.class.getName());
+
+
+
// ------------------------------------------------------------
Constructor
-
-
- public LSKeepaliveServiceEngine()
- throws PerfSONARException {
-
+
+ public LSKeepaliveServiceEngine() throws PerfSONARException {
+
super();
}
-
+
// --------------------------------------------------------- Public
methods
-
-
- public void takeAction(ServiceMessage serviceRequest, ServiceMessage
serviceResponse)
- throws PerfSONARException {
-
+
+ public void takeAction(
+ ServiceMessage serviceRequest,
+ ServiceMessage serviceResponse) throws PerfSONARException {
+
logger.debug("[LSKeepaliveAction] Action KEEPALIVE started");
-
- //extract message
+
+ // extract message
Message requestMessage = serviceRequest.getMessageElement();
-
- //Get Metadata from Request
- Metadata requestMetadata =
- getFirstMetadataFromRequest(requestMessage);
-
- if (requestMetadata==null) {
- String m="LSKeepaliveAction: No metadata in request";
+
+ // extract metadata
+ Metadata requestMetadata = getAndTestMetadata(requestMessage);
+
+ // Get Key from Metadata
+ String keyValue = getAndTestKey(requestMetadata);
+
+ if (dao.isLookupInfo(keyValue)) {
+
+ // key is registered, update time
+ logger.debug("LSKeepaliveAction: LookupInfo found, KEEPALIVE -
update time");
+ updateTime(keyValue);
+
+ } else {
+ String m = "LSKeepaliveAction: Key [" + keyValue
+ + "] not found, can't be updated";
logger.error(m);
- throw new PerfSONARException("error/ls/no_metadata", m);
+ throw new PerfSONARException("error/ls/key_not_found", m);
}
-
- //Get Key from Metadata
-
+
+ Message msg = ResultCodesUtil.generateResultMessage(null,
+ "success/ls/keepalive", "Timestamp for [" + keyValue
+ + "] has been updated");
+
+ serviceResponse.setElement(msg);
+
+ }
+
+
+ /**
+ * gets and tests Key. If key is null return exception (result code)
+ * @param requestMetadata
+ * @return
+ * @throws PerfSONARException
+ */
+ private String getAndTestKey(Metadata requestMetadata)
+ throws PerfSONARException {
+
String keyValue = getParameterFromKey(requestMetadata, LS_KEY);
- logger.debug("LSKeepaliveAction: LS key=["+keyValue+"]");
-
- if (keyValue==null) {
- String m="LSKeepaliveAction: No key in metadata";
+ logger.debug("LSKeepaliveAction: LS key=[" + keyValue + "]");
+
+ if (keyValue == null) {
+ String m = "LSKeepaliveAction: No key in metadata";
logger.error(m);
throw new PerfSONARException("error/ls/no_key", m);
}
-
- if (dao.isLookupInfo(keyValue)) {
+ return keyValue;
+ }
- logger.debug("LSKeepaliveAction: LookupInfo found, KEEPALIVE -
update time");
-
- //key is registered, update time
- updateTime(keyValue);
-
- } else {
- String m="LSKeepaliveAction: Key ["+keyValue+
- "] not found, can't be updated";
+ /**
+ * Gets and tests Metadata, return result code if no metadata
+ * @param requestMessage
+ * @return
+ * @throws PerfSONARException
+ */
+ private Metadata getAndTestMetadata(Message requestMessage)
+ throws PerfSONARException {
+
+ // Get Metadata from Request
+ Metadata requestMetadata =
getFirstMetadataFromRequest(requestMessage);
+
+ if (requestMetadata == null) {
+ String m = "LSKeepaliveAction: No metadata in request";
logger.error(m);
- throw new PerfSONARException("error/ls/key_not_found", m);
+ throw new PerfSONARException("error/ls/no_metadata", m);
}
-
- Message msg = ResultCodesUtil.generateResultMessage(null,
- "success/ls/keepalive", "Timestamp for ["+keyValue+"] has
been updated");
- serviceResponse.setElement(msg);
-
+ return requestMetadata;
}
-
-} //LSKeepaliveAction
+} // LSKeepaliveAction
- perfsonar: r5035 - branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice, svnlog, 03/06/2009
Archive powered by MHonArc 2.6.16.