From d22ab4b6a7de42d4a1d291b2ebd76c2da15630d7 Mon Sep 17 00:00:00 2001 From: "andrea.manzi" Date: Tue, 11 Mar 2014 11:37:01 +0000 Subject: [PATCH] first commit git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/Common/common-smartgears-utils@92955 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 37 ++++++ .project | 23 ++++ .settings/org.eclipse.core.resources.prefs | 6 + .settings/org.eclipse.jdt.core.prefs | 5 + .settings/org.eclipse.m2e.core.prefs | 4 + pom.xml | 35 +++++ .../smartgears/utils/sweeper/Sweeper.java | 125 ++++++++++++++++++ .../utils/sweeper/SweeperClient.java | 43 ++++++ src/main/resources/log4j.properties | 12 ++ .../utils/sweeper/test/SweeperTest.java | 73 ++++++++++ src/test/resources/log4j.properties | 18 +++ 11 files changed, 381 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 pom.xml create mode 100644 src/main/java/org/gcube/smartgears/utils/sweeper/Sweeper.java create mode 100644 src/main/java/org/gcube/smartgears/utils/sweeper/SweeperClient.java create mode 100644 src/main/resources/log4j.properties create mode 100644 src/test/java/org/gcube/smartgears/utils/sweeper/test/SweeperTest.java create mode 100644 src/test/resources/log4j.properties diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..184c35d --- /dev/null +++ b/.classpath @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..11503a6 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + common-smartgears-utils + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ec4300d --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..499c602 --- /dev/null +++ b/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + + org.gcube.tools + maven-parent + 1.0.0 + + org.gcube.core + common-smartgears-utils + 1.0.0-SNAPSHOT + + + org.gcube.resources.discovery + ic-client + 1.0.1-SNAPSHOT + + + org.gcube.resources + registry-publisher + 1.2.2-SNAPSHOT + + + org.slf4j + slf4j-api + 1.6.4 + + + org.slf4j + slf4j-log4j12 + 1.6.4 + test + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/smartgears/utils/sweeper/Sweeper.java b/src/main/java/org/gcube/smartgears/utils/sweeper/Sweeper.java new file mode 100644 index 0000000..bb0ced1 --- /dev/null +++ b/src/main/java/org/gcube/smartgears/utils/sweeper/Sweeper.java @@ -0,0 +1,125 @@ +package org.gcube.smartgears.utils.sweeper; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Iterator; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; + +import org.gcube.common.resources.gcore.GCoreEndpoint; +import org.gcube.common.resources.gcore.HostingNode; +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.resources.gcore.ScopeGroup; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.informationsystem.publisher.AdvancedPublisher; +import org.gcube.informationsystem.publisher.RegistryPublisher; +import org.gcube.informationsystem.publisher.RegistryPublisherFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Andrea Manzi(CERN) + * + * Implements the sweeping on the IS in case a container state is cleaned + * + */ +public class Sweeper { + + String ghn_state_path = ""; + + Logger logger; + + + public Sweeper () throws Exception { + + logger = LoggerFactory.getLogger(Sweeper.class); + + String ghn_path = System.getenv("GHN_HOME"); + + if (ghn_path == null ) { + logger.error("GHN_HOME not defined"); + throw new Exception ("GHN_HOME not defined"); + } + + ghn_state_path=ghn_path+File.separator+"state"; + + + + } + + public HostingNode getGHNProfile() throws JAXBException, FileNotFoundException { + + JAXBContext jc = JAXBContext.newInstance(HostingNode.class); + + Unmarshaller um = jc.createUnmarshaller(); + + HostingNode hostingNode = (HostingNode) + um.unmarshal(new java.io.FileInputStream(ghn_state_path+File.separator+"ghn.xml" )); + + return hostingNode; + } + + public ArrayList getRunningInstanceProfiles() throws JAXBException { + + ArrayList endpoints = new ArrayList(); + + JAXBContext jc = JAXBContext.newInstance(GCoreEndpoint.class); + + Unmarshaller um = jc.createUnmarshaller(); + + File file = new File(ghn_state_path); + + String[] files = file.list(); + + for (String name : files){ + File subfolder = new File(ghn_state_path+ File.separator+ name); + if (subfolder.isDirectory()) { + GCoreEndpoint ri; + try { + ri = (GCoreEndpoint) + um.unmarshal(new java.io.FileInputStream(subfolder.getAbsolutePath()+File.separator+"endpoint.xml" )); + } catch (FileNotFoundException | JAXBException e) { + e.printStackTrace(); + continue; + } + endpoints.add(ri); + } + + } + + return endpoints; + } + + + public void cleanGHNProfile() throws FileNotFoundException, JAXBException{ + forceDeleteResource(this.getGHNProfile()); + + } + + public void cleanRIProfiles() throws FileNotFoundException, JAXBException{ + for (GCoreEndpoint endp : this.getRunningInstanceProfiles()){ + forceDeleteResource(endp); + } + } + + private void forceDeleteResource(Resource resource){ + + ScopeGroup gr = resource.scopes(); + Iterator it = gr.iterator(); + RegistryPublisher rp; + AdvancedPublisher advancedPublisher; + + while (it.hasNext()){ + String scope = it.next(); + ScopeProvider.instance.set(scope); + rp=RegistryPublisherFactory.create(); + advancedPublisher=new AdvancedPublisher(rp); + advancedPublisher.forceRemove(resource); + logger.debug("Removing resource " + resource.id() + " from scope " + scope); + } + } +} diff --git a/src/main/java/org/gcube/smartgears/utils/sweeper/SweeperClient.java b/src/main/java/org/gcube/smartgears/utils/sweeper/SweeperClient.java new file mode 100644 index 0000000..7e19950 --- /dev/null +++ b/src/main/java/org/gcube/smartgears/utils/sweeper/SweeperClient.java @@ -0,0 +1,43 @@ +package org.gcube.smartgears.utils.sweeper; + +import java.io.FileNotFoundException; + +import javax.xml.bind.JAXBException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author andrea + * + */ +public class SweeperClient { + + public static void main (String args[]) { + + Logger logger = LoggerFactory.getLogger(SweeperClient.class); + + Sweeper sw = null; + try { + sw = new Sweeper(); + } catch (Exception e) { + logger.error("Error initializing the Sweeper ", e); + System.exit(1); + } + + try { + sw.cleanGHNProfile(); + } catch (FileNotFoundException | JAXBException e) { + logger.error("Error cleaning the GHN profile ", e); + System.exit(1); + } + try { + sw.cleanRIProfiles(); + } catch (FileNotFoundException | JAXBException e) { + logger.error("Error cleaning the RunningInstance profile ", e); + System.exit(1); + } + } + +} diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties new file mode 100644 index 0000000..f700a10 --- /dev/null +++ b/src/main/resources/log4j.properties @@ -0,0 +1,12 @@ +# Set root category priority to WARN and its only appender to A1. +log4j.rootCategory=DEBUG, A0 + +log4j.appender.A0=org.apache.log4j.ConsoleAppender +log4j.appender.A0.layout=org.apache.log4j.PatternLayout +log4j.appender.A0.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n + +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[DT] %d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n +log4j.category.org.gcube=DEBUG,A1 +log4j.additivity.org.gcube=false diff --git a/src/test/java/org/gcube/smartgears/utils/sweeper/test/SweeperTest.java b/src/test/java/org/gcube/smartgears/utils/sweeper/test/SweeperTest.java new file mode 100644 index 0000000..b8371f2 --- /dev/null +++ b/src/test/java/org/gcube/smartgears/utils/sweeper/test/SweeperTest.java @@ -0,0 +1,73 @@ +package org.gcube.smartgears.utils.sweeper.test; + +import java.io.FileNotFoundException; +import java.util.ArrayList; + +import javax.xml.bind.JAXBException; + +import org.gcube.common.resources.gcore.GCoreEndpoint; +import org.gcube.common.resources.gcore.HostingNode; +import org.gcube.smartgears.utils.sweeper.Sweeper; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class SweeperTest { + + Sweeper sw = null; + + @Before + public void setUp(){ + try { + sw = new Sweeper(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + @Test + public void getGHNProfile() { + + HostingNode node = null; + + try { + node = sw.getGHNProfile(); + } catch (FileNotFoundException | JAXBException e) { + e.printStackTrace(); + } + + Assert.assertNotNull(node); + System.out.println(node.id()); + + } + + @Test + public void getRunningInstanceProfiles() { + ArrayList list = new ArrayList (); + try { + list =sw.getRunningInstanceProfiles(); + } catch (JAXBException e) { + e.printStackTrace(); + } + + System.out.println("Endooint size :"+ list.size()); + for (GCoreEndpoint end : list){ + Assert.assertNotNull(end); + System.out.println(end.id()); + } + + } + + @Test + public void removeGHNProfile() { + + try { + sw.cleanGHNProfile(); + } catch (FileNotFoundException | JAXBException e) { + e.printStackTrace(); + } + + } +} diff --git a/src/test/resources/log4j.properties b/src/test/resources/log4j.properties new file mode 100644 index 0000000..08a56aa --- /dev/null +++ b/src/test/resources/log4j.properties @@ -0,0 +1,18 @@ +# Set root category priority to WARN and its only appender to A1. +log4j.rootCategory=DEBUG, A0 + +log4j.appender.A0=org.apache.log4j.ConsoleAppender +log4j.appender.A0.layout=org.apache.log4j.PatternLayout +log4j.appender.A0.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n + +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=[DT] %d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n +log4j.category.org.gcube=DEBUG,A1 +log4j.additivity.org.gcube=false + +log4j.appender.A2=org.apache.log4j.ConsoleAppender +log4j.appender.A2.layout=org.apache.log4j.PatternLayout +log4j.appender.A2.layout.ConversionPattern=[TEST] %d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n +log4j.category.test=DEBUG,A2 +log4j.additivity.test=false \ No newline at end of file