minor fixes
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-checker-se-plugin@146949 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
8d52170fd7
commit
e2536eb4c6
|
@ -22,5 +22,10 @@
|
|||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
||||
|
|
|
@ -5,6 +5,7 @@ package org.gcube.informationsystem.resource_checker;
|
|||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
@ -13,11 +14,15 @@ import java.util.Map;
|
|||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.gcube.common.resources.gcore.GCoreEndpoint;
|
||||
import org.gcube.common.resources.gcore.GenericResource;
|
||||
import org.gcube.common.resources.gcore.HostingNode;
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||
import org.gcube.common.resources.gcore.Software;
|
||||
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.informationsystem.resource_checker.utils.BasicFunctionalitiesMandatoryReader;
|
||||
import org.gcube.informationsystem.resource_checker.utils.BasicFunctionalityBean;
|
||||
|
@ -29,6 +34,8 @@ import org.gcube.resources.discovery.icclient.ICFactory;
|
|||
import org.gcube.vremanagement.executor.plugin.Plugin;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
/**
|
||||
* The resource-checker-se-plugin implementation class.
|
||||
|
@ -40,7 +47,7 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
private static final int SECONDS2WAIT = 2; // seconds to wait among IS requests
|
||||
private static final String INITIAL_ERRORS_STATEMENT = "Other errors: ";
|
||||
public static final String ROLE_TO_NOTIFY = "role";
|
||||
private static final String NAGIOS_PROPERTY_FILE = "resources_to_fetch.properties";
|
||||
private static final String NAGIOS_PROPERTY_FILE = "/META-INF/plugin_resources/nagios-report-location.properties";
|
||||
private static final Logger logger = LoggerFactory.getLogger(ResourceCheckerPlugin.class);
|
||||
|
||||
public ResourceCheckerPlugin(ResourceCheckerPluginDeclaration pluginDeclaration){
|
||||
|
@ -67,6 +74,7 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
|
||||
String otherFailures = INITIAL_ERRORS_STATEMENT;
|
||||
DiscoveryClient client = ICFactory.client();
|
||||
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
|
||||
Map<String, String> resourceToIdentifierMap = new HashMap<String, String>(mandatoryFunctionalities.size());
|
||||
Set<String> missingResourcesKey = new HashSet<String>(mandatoryFunctionalities.size());
|
||||
|
@ -79,7 +87,7 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
|
||||
String resourceId = null;
|
||||
String resourceKey = service.getName() + ":" + service.getCategory();
|
||||
if((resourceId = isServicePresent(service, client)) == null){
|
||||
if((resourceId = isServicePresent(service, client, docBuilder)) == null){
|
||||
|
||||
List<BasicFunctionalityBean> missingServices = null;
|
||||
if(missingResourcesPerContext.containsKey(context))
|
||||
|
@ -110,7 +118,7 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
}
|
||||
|
||||
if(otherFailures.equals(INITIAL_ERRORS_STATEMENT))
|
||||
otherFailures += "none\n";
|
||||
otherFailures += "none.\n";
|
||||
else
|
||||
otherFailures += "\n";
|
||||
|
||||
|
@ -122,7 +130,7 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
writeReport4Nagios(identifiers);
|
||||
|
||||
// if there are missing resources, notify administrators via mail
|
||||
if(!missingResourcesPerContext.isEmpty())
|
||||
if(!missingResourcesPerContext.isEmpty() || !otherFailures.equals(INITIAL_ERRORS_STATEMENT + "none.\n"))
|
||||
SendNotification.sendMessage(missingResourcesPerContext, otherFailures, (String)inputs.get(ROLE_TO_NOTIFY));
|
||||
|
||||
logger.info("Plugin's execution ended. Map of not available services per scope is the following: \n" + missingResourcesPerContext);
|
||||
|
@ -132,20 +140,21 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
* Check if a given resource is present or is missing.
|
||||
* @param service
|
||||
* @param client
|
||||
* @param docBuilder
|
||||
* @return the identifier of the resource
|
||||
* @throws Exception
|
||||
*/
|
||||
private String isServicePresent(BasicFunctionalityBean service, DiscoveryClient client) throws Exception {
|
||||
private String isServicePresent(BasicFunctionalityBean service, DiscoveryClient client, DocumentBuilder docBuilder) throws Exception {
|
||||
|
||||
Class classFor = service.getType() == null? ServiceEndpoint.class : service.getType(); // default is service end point
|
||||
SimpleQuery q = ICFactory.queryFor(classFor);
|
||||
|
||||
List<ServiceEndpoint> result = null;
|
||||
List result = null;
|
||||
if(classFor.equals(ServiceEndpoint.class)){
|
||||
|
||||
q.addCondition("$resource/Profile/Name/text() eq '"+ service.getName() +"'");
|
||||
q.addCondition("$resource/Profile/Category/text() eq '"+ service.getCategory() +"'");
|
||||
result = (List<ServiceEndpoint>)client.submit(q);
|
||||
result = client.submit(q);
|
||||
|
||||
}else if(classFor.equals(GCoreEndpoint.class)){
|
||||
|
||||
|
@ -175,7 +184,23 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
throw new Exception("Unable to check resource because its type is missing " + service);
|
||||
|
||||
|
||||
return result != null && result.size() > 0 ? result.get(0).id() : null;
|
||||
if(result == null || result.isEmpty())
|
||||
return null;
|
||||
else{
|
||||
|
||||
String elem = (String) result.get(0);
|
||||
Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement();
|
||||
XPathHelper helper = new XPathHelper(node);
|
||||
|
||||
List<String> currValue = null;
|
||||
currValue = helper.evaluate("/Resource/ID/text()");
|
||||
if (currValue != null && currValue.size() > 0) {
|
||||
logger.debug("Id is " + currValue.get(0));
|
||||
return currValue.get(0);
|
||||
}
|
||||
else throw new Exception("ID property is missing!");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**{@inheritDoc}*/
|
||||
|
@ -189,14 +214,16 @@ public class ResourceCheckerPlugin extends Plugin<ResourceCheckerPluginDeclarati
|
|||
* Write a report for nagios
|
||||
* @throws IOException
|
||||
*/
|
||||
private void writeReport4Nagios(List<String> idsMissingResources) throws IOException{
|
||||
private void writeReport4Nagios(List<String> idsMissingResources) throws Exception{
|
||||
|
||||
// find location of nagios file and write the ids of the resources there
|
||||
Properties prop = new Properties();
|
||||
prop.load(getClass().getResourceAsStream(NAGIOS_PROPERTY_FILE));
|
||||
String location = prop.getProperty("location");
|
||||
|
||||
logger.trace("File location for nagios is " + location);
|
||||
|
||||
File f = new File(location);
|
||||
f.getParentFile().mkdirs();
|
||||
f.delete();
|
||||
f.createNewFile();
|
||||
|
||||
|
|
|
@ -134,10 +134,10 @@ public class SendNotification extends PluginStateNotification {
|
|||
logger.warn("Something failed when trying to notify the user", e);
|
||||
}
|
||||
}else
|
||||
logger.error("No notification is going to be sent, because social service is missing or recipient is not specified");
|
||||
logger.error("No notification is going to be sent because social service is missing or recipient is not specified");
|
||||
break;
|
||||
default:
|
||||
logger.info("No notification is going to be sent, because the status of the plugin execution is " + pluginStateEvolution.getPluginState().name());
|
||||
logger.info("No notification is going to be sent because the status of the plugin execution is " + pluginStateEvolution.getPluginState().name());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -197,13 +197,16 @@ public class SendNotification extends PluginStateNotification {
|
|||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Dear ");
|
||||
sb.append(role).append(",").append("\n");
|
||||
sb.append("this is the report of the last running of the " + ResourceCheckerPluginDeclaration.NAME.toUpperCase() + " (" + dataStr + ").\nThe following missing resources have been found:");
|
||||
sb.append("this is the report of the last running of the " + ResourceCheckerPluginDeclaration.NAME.toUpperCase() + " (" + dataStr + ").\nThe following missing resources have been found:\n");
|
||||
|
||||
Iterator<Entry<String, List<BasicFunctionalityBean>>> iterator = missingResourcesPerContext.entrySet().iterator();
|
||||
|
||||
if(!iterator.hasNext())
|
||||
sb.append("none.");
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry<java.lang.String, java.util.List<org.gcube.informationsystem.resource_checker.utils.BasicFunctionalityBean>> entry = (Map.Entry<java.lang.String, java.util.List<org.gcube.informationsystem.resource_checker.utils.BasicFunctionalityBean>>) iterator
|
||||
.next();
|
||||
sb.append("\n");
|
||||
List<BasicFunctionalityBean> list = entry.getValue();
|
||||
for (BasicFunctionalityBean basicFunctionalityBean : list) {
|
||||
sb.append("- resource's name ");
|
||||
|
@ -213,13 +216,13 @@ public class SendNotification extends PluginStateNotification {
|
|||
sb.append(" (in context " + entry.getKey() + ")");
|
||||
}
|
||||
if(iterator.hasNext())
|
||||
sb.append(";");
|
||||
sb.append(";\n");
|
||||
else
|
||||
sb.append(".");
|
||||
sb.append(".\n");
|
||||
|
||||
}
|
||||
sb.append("\n\n");
|
||||
sb.append(otherFailures + ".\n");
|
||||
sb.append(otherFailures + "\n");
|
||||
sb.append("Best,\n" + ResourceCheckerPluginDeclaration.NAME);
|
||||
|
||||
String message = sb.toString();
|
||||
|
|
|
@ -1 +1 @@
|
|||
location=/home/gcube/scopes_data/scopes_status
|
||||
location=/home/gcube/missing_resources/identifiers
|
|
@ -1 +1 @@
|
|||
org.gcube.common.resource_checker.ResourceCheckerPluginDeclaration
|
||||
org.gcube.informationsystem.resource_checker.ResourceCheckerPluginDeclaration
|
Loading…
Reference in New Issue