diff --git a/pom.xml b/pom.xml index 3f5882d..be0c842 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.dataAnalysis dataminer-pool-manager war - 2.3.0-SNAPSHOT + 2.4.0-SNAPSHOT dataminer-pool-manager diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/clients/configuration/DMPMClientConfiguratorManager.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/clients/configuration/DMPMClientConfiguratorManager.java index db20641..e9e8de9 100755 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/clients/configuration/DMPMClientConfiguratorManager.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/clients/configuration/DMPMClientConfiguratorManager.java @@ -1,6 +1,8 @@ package org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration; import java.io.IOException; +import java.util.Iterator; +import java.util.Properties; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.dataanalysis.dataminer.poolmanager.clients.ScopedCacheMap; @@ -11,15 +13,28 @@ import org.tmatesoft.svn.core.SVNException; public class DMPMClientConfiguratorManager{ private final Logger logger; - + private Properties defaultAdmins; + private String admins; + static DMPMClientConfiguratorManager instance; private ScopedCacheMap cacheMap; private DMPMClientConfiguratorManager () { + this.admins = null; this.cacheMap = new ScopedCacheMap(); this.logger = LoggerFactory.getLogger(DMPMClientConfiguratorManager.class); + this.defaultAdmins = new Properties(); + + try + { + this.defaultAdmins.load(this.getClass().getResourceAsStream("/default.admins")); + this.logger.debug("Default users successfully loaded"); + } catch (Exception e) + { + this.logger.error("Unable to get default users",e); + } } private ClientConfigurationCache getCurrentCache () @@ -60,6 +75,29 @@ public class DMPMClientConfiguratorManager{ return new ConfigurationImpl(CONFIGURATIONS.STAGE, getCurrentCache()); } + public String getDefaultAdmins () + { + if (this.admins == null && this.defaultAdmins.isEmpty()) this.admins= "ciro.formisano"; + else if (admins == null) + { + Iterator keys = this.defaultAdmins.keySet().iterator(); + StringBuilder response = new StringBuilder(); + + while (keys.hasNext()) + { + String key = (String) keys.next(); + response.append(this.defaultAdmins.getProperty(key)).append(", "); + } + + this.admins = response.substring(0, response.length()-2); + } + + this.logger.debug("Default admins list "+this.admins); + return this.admins; + + } + + public static void main(String[] args) throws IOException, SVNException { DMPMClientConfiguratorManager a = new DMPMClientConfiguratorManager(); ScopeProvider.instance.set("/gcube/devNext/NextNext"); diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/service/DMPMJob.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/service/DMPMJob.java index 62fcf27..899dd90 100644 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/service/DMPMJob.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/service/DMPMJob.java @@ -19,7 +19,9 @@ import org.gcube.dataanalysis.dataminer.poolmanager.util.CheckMethod; import org.gcube.dataanalysis.dataminer.poolmanager.util.NotificationHelper; import org.gcube.dataanalysis.dataminer.poolmanager.util.SVNUpdater; import org.gcube.dataanalysis.dataminer.poolmanager.util.SendMail; +import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.AlgorithmException; import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.EMailException; +import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.SVNCommitException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tmatesoft.svn.core.SVNException; @@ -186,18 +188,34 @@ public abstract class DMPMJob { //this.setStatusInformation(STATUS.PROGRESS); this.logger.debug("Checking the method..."); - if (methodChecker.checkMethod(this.configuration.getHost(), SecurityTokenProvider.instance.get())&&(methodChecker.algoExists(this.algorithm))) - { + try + { + methodChecker.checkMethod(this.configuration.getHost(), SecurityTokenProvider.instance.get()); + methodChecker.copyAlgorithms(this.algorithm); this.logger.debug("Method OK and algo exists"); - System.out.println("Interface check ok!"); - System.out.println("Both the files exist at the correct path!"); - - this.svnUpdater.updateSVNAlgorithmList(this.algorithm, this.vREName,this.category, this.algorithm_type, + this.logger.debug("Interface check ok!"); + this.logger.debug("Both the files exist at the correct path!"); + boolean algorithmListResult = this.svnUpdater.updateSVNAlgorithmList(this.algorithm, this.vREName,this.category, this.algorithm_type, this.algorithm.getFullname()); this.setStatusInformation(STATUS.COMPLETED); - sm.sendNotification(nh.getSuccessSubject() + " for "+this.algorithm.getName()+ " algorithm", nh.getSuccessBody("\n\n"+this.buildInfo())); - return; - } else + + String bodyResponse = algorithmListResult ? nh.getSuccessBody("\n\n"+this.buildInfo()) : nh.getSuccessBody("\n\n"+this.buildInfo())+"\nWARNING: algorithm list could not be updated on SVN"; + + sm.sendNotification(nh.getSuccessSubject() + " for "+this.algorithm.getName()+ " algorithm", bodyResponse); + + } catch (SVNCommitException e) + { + this.logger.error("Unable to complete the commit operation: "+e.getMessage()); + this.setStatusInformation(STATUS.FAILED); + sm.sendNotification(nh.getFailedSubject() + " for "+this.algorithm.getName()+ " algorithm", + nh.getFailedBody( + "\n"+ + "Commit operation failed for "+e.getFileName() + + "the message of the SVN Server is the following:\n"+e.getSvnErrorMessage().getMessage()+"\n\n" + +this.buildInfo())); + + + } catch (AlgorithmException ae) { this.logger.debug("Operation failed"); this.setStatusInformation(STATUS.FAILED); @@ -207,8 +225,8 @@ public abstract class DMPMJob { "Installation completed but DataMiner Interface not working correctly or files " + this.algorithm.getName() + ".jar and " + this.algorithm.getName() + "_interface.jar not availables at the expected path")+"\n\n"+this.buildInfo()); - } + } } diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/CheckMethod.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/CheckMethod.java index e47c26b..82e4db5 100644 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/CheckMethod.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/CheckMethod.java @@ -9,28 +9,50 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; +import java.util.Properties; +import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.Configuration; import org.gcube.dataanalysis.dataminer.poolmanager.datamodel.Algorithm; +import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.AlgorithmException; +import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.SVNCommitException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.tmatesoft.svn.core.SVNException; + +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.SftpException; public abstract class CheckMethod { private Logger logger; - - public CheckMethod() + private Configuration configuration; + + private final String KNOWN_HOSTS= "~/.ssh/known_hosts", + PRIVATE_KEY = "~/.ssh/id_rsa", + SSH_USER = "root", + SFTP_PROTOCOL = "sftp", + TEMP_DIRECTORY = "tmp"; + private final Properties sshConfig; + + public CheckMethod(Configuration configuration) { this.logger = LoggerFactory.getLogger(CheckMethod.class); + sshConfig = new java.util.Properties(); + sshConfig.put("StrictHostKeyChecking", "no"); } - public boolean checkMethod(String machine, String token) throws Exception { + public void checkMethod(String machine, String token) throws AlgorithmException { try { this.logger.debug("Checking method for machine "+machine); this.logger.debug("By using tocken "+token); - System.out.println("Machine: " + machine); + this.logger.debug("Machine: " + machine); // String getCapabilitesRequest = new String(); // String getCapabilitesResponse = new String(); - System.out.println(" Token: " + token); + this.logger.debug(" Token: " + token); String request = "http://" + machine + "/wps/WebProcessingService?Request=GetCapabilities&Service=WPS&gcube-token=" + token; String response = machine + "___" + token + ".xml"; @@ -72,12 +94,12 @@ public abstract class CheckMethod { String operatorDescription = innerLine.substring(innerLine.indexOf(">") + 1); operatorDescription = operatorDescription.substring(0, operatorDescription.indexOf("<")); this.logger.debug("Operator descriptor "+operatorDescription); - System.out.println(" " + operatorDescription); + this.logger.debug(" " + operatorDescription); innerFlag = false; } else if (innerLine.contains("ows:ExceptionText")) { this.logger.debug("Exception found"); - System.out.println(" " + "error retrieving operator description"); + this.logger.debug(" " + "error retrieving operator description"); innerFlag = false; flag = false; } else @@ -91,29 +113,152 @@ public abstract class CheckMethod { this.logger.debug("Operation successful"); fileWriter.close(); - return true; + } catch (Exception e) { - e.getMessage(); - this.logger.error("Error "+e.getMessage(),e); - return false; + + throw new AlgorithmException("Error "+e.getMessage(),e); + } } - - public abstract boolean algoExists(Algorithm algo/*, String env*/) throws Exception; + + public void copyAlgorithms(Algorithm algo/*, String env*/) throws SVNCommitException, Exception{ + + this.logger.debug("Looking if algo "+algo.getName()+ " exists"); + File file = new File(this.configuration.getGhostAlgoDirectory()+"/"+algo.getName()+".jar"); + File file2 = new File(this.configuration.getGhostAlgoDirectory()+"/"+algo.getName()+"_interface.jar"); + this.logger.debug("Looking for files "+file.getPath()+ " "+file.getPath()); + + + if ((this.doesExist(file.getPath()/*,env*/)) && (this.doesExist(file2.getPath()/*,env*/))) + { + this.logger.debug("Files found"); + this.copyFromDmToSVN(file/*,env*/); + this.copyFromDmToSVN(file2/*,env*/); + this.logger.debug("Files have been copied to SVN"); + } + else + { + this.logger.debug("Files not found"); + this.logger.debug("Algorithm "+algo.getName()+".jar"+ " and "+algo.getName()+"_interface.jar files are not present at the expected path"); + throw new AlgorithmException("Algorithm "+algo.getName()+".jar"+ " and "+algo.getName()+"_interface.jar files are not present at the expected path"); + } + + } + - public abstract void deleteFiles(Algorithm a/*,String env*/) throws Exception; + public void deleteFiles(Algorithm a/*,String env*/) throws Exception + { + Session session = generateSession(); + System.out.println("checking existing in env: " + this.configuration.getHost()); + + File file = new File(this.configuration.getGhostAlgoDirectory()+"/"+a.getName()+".jar"); + File file2 = new File(this.configuration.getGhostAlgoDirectory()+"/"+a.getName()+"_interface.jar"); + + + System.out.println("First file is located to: "+file.getPath()); + System.out.println("Second file is located to: "+file2.getPath()); + + + System.out.println("session created."); + session.setConfig(this.sshConfig); + session.connect(); + Channel channel = session.openChannel(SFTP_PROTOCOL); + channel.connect(); + System.out.println("shell channel connected...."); + + ChannelSftp c = (ChannelSftp) channel; + + if(doesExist(file.getPath()/*,env*/)&&(doesExist(file2.getPath()/*,env*/))){ + + c.rm(file.getPath()); + c.rm(file2.getPath()); + System.out.println("Both the files have been deleted"); + } + else System.out.println("Files not found"); + channel.disconnect(); + c.disconnect(); + session.disconnect(); + + } - public abstract boolean doesExist(String path/*, String env*/) throws Exception; + + public boolean doesExist(String path/*, String env*/) throws Exception { + + Session session = generateSession(); + boolean success = false; + session.connect(); + Channel channel = session.openChannel(SFTP_PROTOCOL); + channel.connect(); + System.out.println("shell channel connected...."); + + ChannelSftp c = (ChannelSftp) channel; + + + System.out.println(path); + + try { + c.lstat(path); + success = true; + } catch (SftpException e) { + if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { + // file doesn't exist + success = false; + } + //success = true; // something else went wrong + } + channel.disconnect(); + c.disconnect(); + session.disconnect(); + this.logger.debug("Operation result "+success); + return success; + + } + - public abstract void copyFromDmToSVN(File a/*,String env*/) throws Exception; + protected abstract void copyFromDmToSVN(File a) throws SVNCommitException, Exception; + + + protected void copyFromDmToSVN(File algorithmsFile/*,String env*/,SVNUpdater svnUpdater) throws SVNException, SVNCommitException, JSchException, SftpException { + + this.logger.debug("Copying algorithm file from Data Miner to SVN"); + String fileName = algorithmsFile.getName(); + this.logger.debug("File name "+fileName); + Session session = generateSession(); + session.connect(); + Channel channel = session.openChannel(SFTP_PROTOCOL); + channel.connect(); + ChannelSftp sftp = (ChannelSftp) channel; + sftp.cd(this.configuration.getGhostAlgoDirectory()); + String remoteFile = new StringBuilder(this.configuration.getGhostAlgoDirectory()).append(File.separator).append(fileName).toString(); + this.logger.debug("Remote file "+remoteFile); + String localFile = new StringBuilder(File.separator).append(TEMP_DIRECTORY).append(File.separator).append(fileName).toString(); + this.logger.debug("Local file "+localFile); + sftp.get(remoteFile,localFile); + channel.disconnect(); + session.disconnect(); + File f = new File(localFile); + svnUpdater.updateAlgorithmFiles(f); + f.delete(); + } + private Session generateSession () throws JSchException + { + JSch jsch = new JSch(); + jsch.setKnownHosts(KNOWN_HOSTS); + jsch.addIdentity(PRIVATE_KEY); + this.logger.debug("Private Key Added."); + Session session = jsch.getSession(SSH_USER, this.configuration.getHost()); + this.logger.debug("session created."); + session.setConfig(this.sshConfig); + return session; + } diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/NotificationHelper.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/NotificationHelper.java index 988e090..2141ad3 100644 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/NotificationHelper.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/NotificationHelper.java @@ -4,6 +4,13 @@ package org.gcube.dataanalysis.dataminer.poolmanager.util; public abstract class NotificationHelper { + private String subjectHeader; + + protected NotificationHelper (String subjectHeader) + { + this.subjectHeader = subjectHeader; + } + // private Exception executionException; @@ -17,10 +24,16 @@ public abstract class NotificationHelper { // this.executionException = executionException; // } - public abstract String getSuccessSubject(); + public String getSuccessSubject() { + return this.subjectHeader+" is SUCCESS"; + } - public abstract String getFailedSubject(); + + + public String getFailedSubject() { + return String.format(this.subjectHeader+" is FAILED"); + } public String getSuccessBody(String info) { diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SVNUpdater.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SVNUpdater.java index 57791ec..118dba4 100644 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SVNUpdater.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SVNUpdater.java @@ -3,6 +3,8 @@ package org.gcube.dataanalysis.dataminer.poolmanager.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; @@ -19,10 +21,14 @@ import java.util.List; import java.util.Set; import java.util.TimeZone; -import org.apache.commons.io.FileUtils; import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.Configuration; import org.gcube.dataanalysis.dataminer.poolmanager.datamodel.Algorithm; import org.gcube.dataanalysis.dataminer.poolmanager.datamodel.Dependency; +import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.SVNCommitException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.tmatesoft.svn.core.SVNCommitInfo; +import org.tmatesoft.svn.core.SVNErrorMessage; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNNodeKind; import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; @@ -38,11 +44,12 @@ public abstract class SVNUpdater { private SVNRepository svnRepository; private Configuration configuration; + private Logger logger; public SVNUpdater(Configuration configuration) throws SVNException { this.configuration = configuration; this.svnRepository = SVNRepositoryManager.getInstance(configuration).getSvnRepository(); - + this.logger = LoggerFactory.getLogger(SVNUpdater.class); } // public void updateRPRotoDeps(Algorithm algorithm) { @@ -64,7 +71,10 @@ public abstract class SVNUpdater { private String getDependencyFile (Configuration configuration, String language) { - switch (language) { + this.logger.debug("Getting dependency file for language "+language); + + switch (language) + { case "R": return configuration.getSVNCRANDepsList(); case "R-blackbox": @@ -89,14 +99,14 @@ public abstract class SVNUpdater { } - public void updateSVNAlgorithmList(Algorithm algorithm, String targetVRE, String category, String algorithm_type, String user/*, String env*/) + public boolean updateSVNAlgorithmList(Algorithm algorithm, String targetVRE, String category, String algorithm_type, String user/*, String env*/) { - this.updateSVNAlgorithmList(this.configuration.getSVNAlgorithmsList(), algorithm, targetVRE, category, algorithm_type, user); + return this.updateSVNAlgorithmList(this.configuration.getSVNAlgorithmsList(), algorithm, targetVRE, category, algorithm_type, user); } - public void updateAlgorithmFiles(File a) throws SVNException{ + public void updateAlgorithmFiles(File a) throws SVNException, SVNCommitException{ //this.updateAlgorithmList(this.configuration.getSVNMainAlgoRepo(), a); this.updateAlgorithmList(this.configuration.getRepository(), a); } @@ -106,82 +116,92 @@ public abstract class SVNUpdater { - private void updateAlgorithmList(String svnMainAlgoRepo, File a) throws SVNException { - try { - System.out.println("Adding .jar file: " + a + " to repository " + svnMainAlgoRepo); - - if (fileExists(svnMainAlgoRepo+File.separator+a.getName(), -1)){ - this.updateFile(reteriveByteArrayInputStream(a), svnMainAlgoRepo, a.getName()); + private void updateAlgorithmList(String svnMainAlgoRepo, File algorithmsFile) throws SVNException, SVNCommitException + { + this.logger.debug("Adding .jar file: " + algorithmsFile + " to repository " + svnMainAlgoRepo); + + try + { + + if (fileExists(svnMainAlgoRepo+File.separator+algorithmsFile.getName(), -1)) + { + this.updateFile(new FileInputStream(algorithmsFile), svnMainAlgoRepo, algorithmsFile.getName()); } - else this.putFile(reteriveByteArrayInputStream(a), svnMainAlgoRepo,a.getName()); - - } catch (Exception ex) { - ex.printStackTrace(); + else this.putFile(new FileInputStream(algorithmsFile), svnMainAlgoRepo,algorithmsFile.getName()); + } + catch (FileNotFoundException e) + { + this.logger.error("Temporary algorithm file not found: this exception should not happen",e); } - - finally { - svnRepository.closeSession(); + finally + { + this.svnRepository.closeSession(); } -} + } - public void putFile(ByteArrayInputStream byteArrayInputStream, String destinationFolder, String fileName) - throws SVNException { - - + public void putFile(FileInputStream fileInputSreeam, String destinationFolder, String fileName) throws SVNException, SVNCommitException + { + this.logger.debug("Putting new file on the SVN repository"); final ISVNEditor commitEditor = svnRepository.getCommitEditor("Add algorithm to list", null); commitEditor.openRoot(-1); commitEditor.openDir(destinationFolder, -1); + String filePath = destinationFolder + "/" + fileName; + commitEditor.addFile(filePath, null, -1); + commitEditor.applyTextDelta(filePath, null); + SVNDeltaGenerator deltaGenerator = new SVNDeltaGenerator(); + String checksum = deltaGenerator.sendDelta(filePath, fileInputSreeam, commitEditor, true); + commitEditor.closeFile(filePath, checksum); + commitEditor.closeDir(); + commitEditor.closeDir(); + SVNCommitInfo info = commitEditor.closeEdit(); + SVNErrorMessage errorMessage = info.getErrorMessage(); - - String filePath = destinationFolder + "/" + fileName; - - - //commitEditor.openFile(filePath, -1); - - - - commitEditor.addFile(filePath, null, -1); - - commitEditor.applyTextDelta(filePath, null); - SVNDeltaGenerator deltaGenerator = new SVNDeltaGenerator(); - String checksum = deltaGenerator.sendDelta(filePath, byteArrayInputStream, commitEditor, true); - commitEditor.closeFile(filePath, checksum); - commitEditor.closeDir(); - commitEditor.closeDir(); - commitEditor.closeEdit(); + if (errorMessage != null) + { + this.logger.error("Operation failed: "+errorMessage.getFullMessage()); + SVNCommitException exception = new SVNCommitException(errorMessage); + exception.setFileName(fileName); + throw exception; } + + this.logger.debug("Operation completed"); + } - public void updateFile(ByteArrayInputStream byteArrayInputStream, String destinationFolder, String fileName) - throws SVNException { + public void updateFile(FileInputStream fileInputStream, String destinationFolder, String fileName) throws SVNException, SVNCommitException { - - final ISVNEditor commitEditor = svnRepository.getCommitEditor("Add algorithm to list", null); + this.logger.debug("Updating existing file on the SVN repository"); + final ISVNEditor commitEditor = svnRepository.getCommitEditor("Updating algorithm", null); commitEditor.openRoot(-1); commitEditor.openDir(destinationFolder, -1); + String filePath = destinationFolder + "/" + fileName; + // if (fileExists(filePath, -1)) { // updating existing file + commitEditor.openFile(filePath, -1); + //} else { // creating new file + //commitEditor.addFile(filePath, null, -1); + //} + commitEditor.applyTextDelta(filePath, null); + SVNDeltaGenerator deltaGenerator = new SVNDeltaGenerator(); + String checksum = deltaGenerator.sendDelta(filePath, fileInputStream, commitEditor, true); + commitEditor.closeFile(filePath, checksum); + commitEditor.closeDir(); + commitEditor.closeDir(); + SVNCommitInfo info = commitEditor.closeEdit(); + SVNErrorMessage errorMessage = info.getErrorMessage(); - - String filePath = destinationFolder + "/" + fileName; - - // if (fileExists(filePath, -1)) { // updating existing file - - commitEditor.openFile(filePath, -1); - - //} else { // creating new file - - //commitEditor.addFile(filePath, null, -1); - //} - commitEditor.applyTextDelta(filePath, null); - SVNDeltaGenerator deltaGenerator = new SVNDeltaGenerator(); - String checksum = deltaGenerator.sendDelta(filePath, byteArrayInputStream, commitEditor, true); - commitEditor.closeFile(filePath, checksum); - commitEditor.closeDir(); - commitEditor.closeDir(); - commitEditor.closeEdit(); + if (errorMessage != null) + { + this.logger.error("Operation failed: "+errorMessage.getFullMessage()); + SVNCommitException exception = new SVNCommitException(errorMessage); + exception.setFileName(fileName+" to be updated"); + throw exception; } + + this.logger.debug("Operation completed"); + } @@ -197,15 +217,19 @@ public abstract class SVNUpdater { - public static ByteArrayInputStream reteriveByteArrayInputStream(File file) throws IOException { - - return new ByteArrayInputStream(FileUtils.readFileToByteArray(file)); - } +// public static ByteArrayInputStream reteriveByteArrayInputStream(File file) throws IOException +// { +// +// return new ByteArrayInputStream(FileUtils.readFileToByteArray(file)); +// } - private void updateSVNAlgorithmList(String file, Algorithm algorithm, String targetVRE, String category, String algorithm_type, String user/*, String env*/) { + private boolean updateSVNAlgorithmList(String file, Algorithm algorithm, String targetVRE, String category, String algorithm_type, String user/*, String env*/) + { + boolean response = false; + try { - System.out.println("Updating algorithm list: " + file); + this.logger.debug("Updating algorithm list: " + file); final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); svnRepository.getFile(file, SVNRepository.INVALID_REVISION, null, byteArrayOutputStream); String lines[] = byteArrayOutputStream.toString().split("\\r?\\n"); @@ -246,15 +270,30 @@ public abstract class SVNUpdater { final String checksum = deltaGenerator.sendDelta(file, new ByteArrayInputStream(originalContents), 0, new ByteArrayInputStream(bytes), commitEditor, true); commitEditor.closeFile(file, checksum); - commitEditor.closeEdit(); + SVNCommitInfo info = commitEditor.closeEdit(); + SVNErrorMessage errorMessage = info.getErrorMessage(); + + if (errorMessage != null) + { + this.logger.error("Operation failed: "+errorMessage.getFullMessage()); + response = false; + } + else response = true; + - } catch (Exception ex) { - ex.printStackTrace(); + } + catch (Exception ex) + { + this.logger.error("Unable to commit algorithm list",ex); + response = false; } - finally { + finally + { svnRepository.closeSession(); } + + return response; } diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SendMail.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SendMail.java index 485782d..ffb1035 100644 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SendMail.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/SendMail.java @@ -25,36 +25,51 @@ import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.resources.gcore.GCoreEndpoint; import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.DMPMClientConfiguratorManager; import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.EMailException; import org.gcube.resources.discovery.client.api.DiscoveryClient; import org.gcube.resources.discovery.client.queries.api.SimpleQuery; import org.json.JSONArray; import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class SendMail { + private Logger logger; + private final String WRITE_MESSAGE_ADDRESS_PATH ="messages/writeMessageToUsers?gcube-token=", + USER_ROLES_ADDRESS_PATH ="2/users/get-usernames-by-role?role-name=DataMiner-Manager&gcube-token=", + ENCODING = "UTF-8", + SENDER_PARAMETER_FORMAT = "&sender=dataminer&recipients=%s&subject=%s&body=%s", + SOCIAL_SERVICE_QUERY_CONDITION ="$resource/Profile/ServiceName/text() eq 'SocialNetworking'", + SOCIAL_SERVICE_URI="jersey-servlet", + JSON_MIME_TYPE = "application/json"; + public SendMail() { - // TODO Auto-generated constructor stub + this.logger = LoggerFactory.getLogger(SendMail.class); } - public void sendNotification(String subject, String body) throws EMailException { - - //AnalysisLogger.getLogger().debug("Emailing System->Starting request of email in scope " + ScopeProvider.instance.get()); - - //String serviceAddress = InfraRetrieval.findEmailingSystemAddress(ScopeProvider.instance.get()); - - - + private String getRequestMessage (String addressPath) + { String serviceAddress = this.getSocialService(); + StringBuilder requestMessageBuilder = new StringBuilder(serviceAddress); + if (!serviceAddress.endsWith("/")) requestMessageBuilder.append('/'); + + requestMessageBuilder.append(addressPath).append(SecurityTokenProvider.instance.get()); + String requestForMessage = requestMessageBuilder.toString(); + this.logger.debug("Request "+requestForMessage); + return requestForMessage; + } + + public void sendNotification(String subject, String body) throws EMailException + { + this.logger.debug("Sending mail notification for "+subject); + this.logger.debug("Body "+body); + - if (!serviceAddress.endsWith("/")) - serviceAddress = serviceAddress + "/"; - String requestForMessage = serviceAddress + "messages/writeMessageToUsers" + "?gcube-token=" - + SecurityTokenProvider.instance.get(); - requestForMessage = requestForMessage.replace("http://", "https://").replace(":80", ""); //AnalysisLogger.getLogger().debug("Emailing System->Request url is going to be " + requestForMessage); @@ -62,17 +77,20 @@ public class SendMail { try { - subject = URLEncoder.encode(subject, "UTF-8"); - body = URLEncoder.encode(body, "UTF-8"); + subject = URLEncoder.encode(subject, ENCODING); + body = URLEncoder.encode(body, ENCODING); } catch (UnsupportedEncodingException e) { throw new EMailException(e); } - String requestParameters = "&sender=dataminer&recipients=" + this.getAdmins() + "&subject=" + subject + "&body=" - + body; + String requestForMessage = getRequestMessage(WRITE_MESSAGE_ADDRESS_PATH); + requestForMessage = requestForMessage.replace("http://", "https://").replace(":80", ""); + + String requestParameters = String.format(SENDER_PARAMETER_FORMAT, this.getAdmins(), subject , body); + String response = this.sendPostRequest(requestForMessage, requestParameters); //AnalysisLogger.getLogger().debug("Emailing System->Emailing response OK "); @@ -88,7 +106,7 @@ public class SendMail { public String username(String token) throws ObjectNotFound, Exception { AuthorizationEntry entry = authorizationService().get(token); - System.out.println(entry.getClientInfo().getId()); + this.logger.debug(entry.getClientInfo().getId()); return entry.getClientInfo().getId(); } @@ -115,10 +133,10 @@ public class SendMail { public String getSocialService() { SimpleQuery query = queryFor(GCoreEndpoint.class); - query.addCondition("$resource/Profile/ServiceName/text() eq 'SocialNetworking'"); + query.addCondition(SOCIAL_SERVICE_QUERY_CONDITION); DiscoveryClient client = clientFor(GCoreEndpoint.class); List resources = client.submit(query); - String a = resources.get(0).profile().endpointMap().get("jersey-servlet").uri().toString(); + String a = resources.get(0).profile().endpointMap().get(SOCIAL_SERVICE_URI).uri().toString(); return a; } @@ -172,21 +190,20 @@ public class SendMail { //GcoreEndpointReader ep = new GcoreEndpointReader(ScopeProvider.instance.get()); - String serviceAddress = this.getSocialService(); + String serviceAddress = getRequestMessage(USER_ROLES_ADDRESS_PATH); //String serviceAddress = InfraRetrieval.findEmailingSystemAddress(ScopeProvider.instance.get()); //String serviceAddress = ep.getResourceEntyName();//"https://socialnetworking1.d4science.org/social-networking-library-ws/rest/"; - serviceAddress = serviceAddress.endsWith("/") ? serviceAddress : serviceAddress + "/"; - serviceAddress+= "2/users/get-usernames-by-role?"; - serviceAddress+= "role-name=DataMiner-Manager" + "&gcube-token=" + SecurityTokenProvider.instance.get(); +// serviceAddress = serviceAddress.endsWith("/") ? serviceAddress : serviceAddress + "/"; +// serviceAddress+= "2/users/get-usernames-by-role?role-name=DataMiner-Manager&gcube-token=" + SecurityTokenProvider.instance.get(); - System.out.println("Url is " + serviceAddress); + this.logger.debug("Admin roles url is " + serviceAddress); CloseableHttpClient client = HttpClientBuilder.create().build(); HttpGet getReq = new HttpGet(serviceAddress); - getReq.setHeader("accept", "application/json"); - getReq.setHeader("content-type", "application/json"); + getReq.setHeader("accept", JSON_MIME_TYPE); + getReq.setHeader("content-type", JSON_MIME_TYPE); System.out.println(EntityUtils.toString(client.execute(getReq).getEntity())); return EntityUtils.toString(client.execute(getReq).getEntity()); @@ -210,7 +227,7 @@ public class SendMail { } return s.toString().replace("[", "").replace("]", ""); } - catch(Exception a){return "ciro.formisano, lucio.lelii, roberto.cirillo, gianpaolo.coro, giancarlo.panichi, scarponi"; } + catch(Exception a){return DMPMClientConfiguratorManager.getInstance().getDefaultAdmins(); } } @@ -240,6 +257,7 @@ public class SendMail { public static void main(String[] args) throws Exception { + //ScopeProvider.instance.set("/d4science.research-infrastructures.eu/gCubeApps/RPrototypingLab"); //SecurityTokenProvider.instance.set("3a23bfa4-4dfe-44fc-988f-194b91071dd2-843339462"); diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/exception/AlgorithmException.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/exception/AlgorithmException.java new file mode 100755 index 0000000..14f950a --- /dev/null +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/exception/AlgorithmException.java @@ -0,0 +1,26 @@ +package org.gcube.dataanalysis.dataminer.poolmanager.util.exception; + +public class AlgorithmException extends Exception { + + /** + * + */ + private static final long serialVersionUID = -5678597187512954288L; + + public AlgorithmException () + { + super (); + } + + public AlgorithmException (String message) + { + super (message); + } + + public AlgorithmException (String message, Throwable cause) + { + super (message, cause); + } + + +} diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/exception/SVNCommitException.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/exception/SVNCommitException.java new file mode 100755 index 0000000..ed9149b --- /dev/null +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/exception/SVNCommitException.java @@ -0,0 +1,41 @@ +package org.gcube.dataanalysis.dataminer.poolmanager.util.exception; + +import org.tmatesoft.svn.core.SVNErrorMessage; + +public class SVNCommitException extends Exception { + + /** + * + */ + private static final long serialVersionUID = -5225403308313619585L; + + private SVNErrorMessage svnErrorMessage; + + private String fileName; + + public SVNCommitException(SVNErrorMessage errorMessage) { + super ("Unable to commit"); + this.svnErrorMessage = errorMessage; + } + + public SVNCommitException(String message,SVNErrorMessage errorMessage) { + super (message); + this.svnErrorMessage = errorMessage; + } + + public SVNErrorMessage getSvnErrorMessage() { + return svnErrorMessage; + } + + public void setFileName (String fileName) + { + this.fileName = fileName; + } + + public String getFileName () + { + return this.fileName; + } + + +} diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodProduction.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodProduction.java index 6ee9f54..d817e5a 100755 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodProduction.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodProduction.java @@ -2,202 +2,28 @@ package org.gcube.dataanalysis.dataminer.poolmanager.util.impl; import java.io.File; -import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.Configuration; import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.DMPMClientConfiguratorManager; -import org.gcube.dataanalysis.dataminer.poolmanager.datamodel.Algorithm; import org.gcube.dataanalysis.dataminer.poolmanager.util.CheckMethod; -import org.gcube.dataanalysis.dataminer.poolmanager.util.SVNUpdater; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.gcube.dataanalysis.dataminer.poolmanager.util.exception.SVNCommitException; +import org.tmatesoft.svn.core.SVNException; -import com.jcraft.jsch.Channel; -import com.jcraft.jsch.ChannelSftp; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.Session; +import com.jcraft.jsch.JSchException; import com.jcraft.jsch.SftpException; public class CheckMethodProduction extends CheckMethod{ - - private Logger logger; + public CheckMethodProduction() { - this.logger = LoggerFactory.getLogger(CheckMethodProduction.class); - } - - - - - @Override - public boolean algoExists(Algorithm algo/*, String env*/) throws Exception{ - - this.logger.debug("Looking if algo "+algo.getName()+ " exists in production"); - Configuration productionConfiguration = DMPMClientConfiguratorManager.getInstance().getProductionConfiguration(); - File file = new File(productionConfiguration.getGhostAlgoDirectory()+"/"+algo.getName()+".jar"); - File file2 = new File(productionConfiguration.getGhostAlgoDirectory()+"/"+algo.getName()+"_interface.jar"); - + super (DMPMClientConfiguratorManager.getInstance().getProductionConfiguration()); - System.out.println("First file is located to: "+file.getPath()); - System.out.println("Second file is located to: "+file2.getPath()); - - - if ((this.doesExist(file.getPath()/*,env*/)) && (this.doesExist(file2.getPath()/*,env*/))){ - this.copyFromDmToSVN(file/*,env*/); - this.copyFromDmToSVN(file2/*,env*/); - - - return true; - } - else - System.out.println("Algorithm "+algo.getName()+".jar"+ " and "+algo.getName()+"_interface.jar files are not present at the expected path"); - return false; - } - - @Override - public void deleteFiles(Algorithm a/*,String env*/) throws Exception - { - JSch jsch = new JSch(); - Session session = null; - Channel channel = null; - ChannelSftp c = null; - Configuration productionConfiguration = DMPMClientConfiguratorManager.getInstance().getProductionConfiguration(); - System.out.println("checking existing in env: " + productionConfiguration.getHost()); - - File file = new File(productionConfiguration.getGhostAlgoDirectory()+"/"+a.getName()+".jar"); - File file2 = new File(productionConfiguration.getGhostAlgoDirectory()+"/"+a.getName()+"_interface.jar"); - - - System.out.println("First file is located to: "+file.getPath()); - System.out.println("Second file is located to: "+file2.getPath()); - - - jsch.setKnownHosts("~/.ssh/known_hosts"); - String privateKey = "~/.ssh/id_rsa"; - - jsch.addIdentity(privateKey); - System.out.println("Private Key Added."); - - session = jsch.getSession("root", productionConfiguration.getHost()); - System.out.println("session created."); - - java.util.Properties config = new java.util.Properties(); - config.put("StrictHostKeyChecking", "no"); - - session.setConfig(config); - session.connect(); - - channel = session.openChannel("sftp"); - channel.connect(); - System.out.println("shell channel connected...."); - - c = (ChannelSftp) channel; - - if(doesExist(file.getPath()/*,env*/)&&(doesExist(file2.getPath()/*,env*/))){ - - c.rm(file.getPath()); - c.rm(file2.getPath()); - System.out.println("Both the files have been deleted"); - } - else System.out.println("Files not found"); - channel.disconnect(); - c.disconnect(); - session.disconnect(); - } @Override - public boolean doesExist(String path/*, String env*/) throws Exception { - JSch jsch = new JSch(); - Session session = null; - Channel channel = null; - ChannelSftp c = null; - boolean success = false; - Configuration productionConfiguration = DMPMClientConfiguratorManager.getInstance().getProductionConfiguration(); - - - jsch.setKnownHosts("~/.ssh/known_hosts"); - String privateKey = "~/.ssh/id_rsa"; - - jsch.addIdentity(privateKey); - System.out.println("Private Key Added."); - - session = jsch.getSession("root", productionConfiguration.getHost()); - System.out.println("session created."); - - java.util.Properties config = new java.util.Properties(); - config.put("StrictHostKeyChecking", "no"); - - session.setConfig(config); - session.connect(); - - channel = session.openChannel("sftp"); - channel.connect(); - System.out.println("shell channel connected...."); - - c = (ChannelSftp) channel; - - - System.out.println(path); - - try { - c.lstat(path); - success = true; - } catch (SftpException e) { - if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { - // file doesn't exist - success = false; - } - //success = true; // something else went wrong - } - channel.disconnect(); - c.disconnect(); - session.disconnect(); - return success; - - } - - - @Override - public void copyFromDmToSVN(File a/*,String env*/) throws Exception { - JSch jsch = new JSch(); - Session session = null; - SVNUpdater svnUpdater = new SVNUpdaterProduction(); - Configuration productionConfiguration = DMPMClientConfiguratorManager.getInstance().getProductionConfiguration(); - - jsch.setKnownHosts("~/.ssh/known_hosts"); - String privateKey = "~/.ssh/id_rsa"; - - jsch.addIdentity(privateKey); - System.out.println("Private Key Added."); - - session = jsch.getSession("root", productionConfiguration.getHost()); - System.out.println("session created."); - - java.util.Properties config = new java.util.Properties(); - config.put("StrictHostKeyChecking", "no"); - - session.setConfig(config); - session.connect(); + protected void copyFromDmToSVN(File a) throws SVNException, SVNCommitException, JSchException, SftpException { + super.copyFromDmToSVN(a, new SVNUpdaterProduction()); - Channel channel = session.openChannel("sftp"); - channel.connect(); - - ChannelSftp sftp = (ChannelSftp) channel; - - sftp.cd(productionConfiguration.getGhostAlgoDirectory()); - - System.out.println("REMOTE : "+productionConfiguration.getGhostAlgoDirectory()+"/"+a.getName()); - System.out.println("LOCAL : /tmp/"+a.getName()); - - sftp.get(productionConfiguration.getGhostAlgoDirectory()+"/"+a.getName(),"/tmp/"+a.getName()); - - channel.disconnect(); - session.disconnect(); - - File f = new File("/tmp/"+a.getName()); - svnUpdater.updateAlgorithmFiles(f); - f.delete(); } @@ -242,8 +68,15 @@ public class CheckMethodProduction extends CheckMethod{ //System.out.println(a.checkMethod("dataminer-proto-ghost.d4science.org", // "3a23bfa4-4dfe-44fc-988f-194b91071dd2-843339462")); -System.out.println(a.checkMethod("dataminer-ghost-d.dev.d4science.org", - "708e7eb8-11a7-4e9a-816b-c9ed7e7e99fe-98187548")); + try + { + a.checkMethod("dataminer-ghost-d.dev.d4science.org", + "708e7eb8-11a7-4e9a-816b-c9ed7e7e99fe-98187548"); + } catch (Exception e) + { + e.printStackTrace(); + } + //Algorithm aa = new Algorithm(); diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodStaging.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodStaging.java index 221cfeb..0d3a0eb 100755 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodStaging.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/CheckMethodStaging.java @@ -2,218 +2,34 @@ package org.gcube.dataanalysis.dataminer.poolmanager.util.impl; import java.io.File; -import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.Configuration; import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.DMPMClientConfiguratorManager; -import org.gcube.dataanalysis.dataminer.poolmanager.datamodel.Algorithm; import org.gcube.dataanalysis.dataminer.poolmanager.util.CheckMethod; -import org.gcube.dataanalysis.dataminer.poolmanager.util.SVNUpdater; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.jcraft.jsch.Channel; -import com.jcraft.jsch.ChannelSftp; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.Session; -import com.jcraft.jsch.SftpException; public class CheckMethodStaging extends CheckMethod{ - - private Logger logger; + public CheckMethodStaging() { - this.logger = LoggerFactory.getLogger(CheckMethodStaging.class); + super (DMPMClientConfiguratorManager.getInstance().getStagingConfiguration()); } - @Override - public boolean algoExists(Algorithm algo/*, String env*/) throws Exception{ - this.logger.debug("Looking if algo "+algo.getName()+ " exists"); - Configuration stagingConfiguration = DMPMClientConfiguratorManager.getInstance().getStagingConfiguration(); - File file = new File(stagingConfiguration.getGhostAlgoDirectory()+"/"+algo.getName()+".jar"); - File file2 = new File(stagingConfiguration.getGhostAlgoDirectory()+"/"+algo.getName()+"_interface.jar"); - this.logger.debug("Looking for files "+file.getPath()+ " "+file.getPath()); - - System.out.println("First file is located to: "+file.getPath()); - System.out.println("Second file is located to: "+file2.getPath()); - - - if ((this.doesExist(file.getPath()/*,env*/)) && (this.doesExist(file2.getPath()/*,env*/))) - { - this.logger.debug("Files found"); - this.copyFromDmToSVN(file/*,env*/); - this.copyFromDmToSVN(file2/*,env*/); - System.out.println("Files have been copied to SVN"); - - - return true; - } - else - { - this.logger.debug("Files not found"); - System.out.println("Algorithm "+algo.getName()+".jar"+ " and "+algo.getName()+"_interface.jar files are not present at the expected path"); - return false; - } - - } - @Override - public void deleteFiles(Algorithm a/*,String env*/) throws Exception{ - JSch jsch = new JSch(); - Session session = null; - Channel channel = null; - ChannelSftp c = null; - Configuration stagingConfiguration = DMPMClientConfiguratorManager.getInstance().getStagingConfiguration(); - System.out.println("checking existing in env: " + stagingConfiguration.getHost()); - - File file = new File(stagingConfiguration.getGhostAlgoDirectory()+"/"+a.getName()+".jar"); - File file2 = new File(stagingConfiguration.getGhostAlgoDirectory()+"/"+a.getName()+"_interface.jar"); - - - System.out.println("First file is located to: "+file.getPath()); - System.out.println("Second file is located to: "+file2.getPath()); - - - jsch.setKnownHosts("~/.ssh/known_hosts"); - String privateKey = "~/.ssh/id_rsa"; - jsch.addIdentity(privateKey); - System.out.println("Private Key Added."); - session = jsch.getSession("root", stagingConfiguration.getHost()); - System.out.println("session created."); - java.util.Properties config = new java.util.Properties(); - config.put("StrictHostKeyChecking", "no"); - - session.setConfig(config); - session.connect(); - - channel = session.openChannel("sftp"); - channel.connect(); - System.out.println("shell channel connected...."); - - c = (ChannelSftp) channel; - - if(doesExist(file.getPath()/*,env*/)&&(doesExist(file2.getPath()/*,env*/))){ - - c.rm(file.getPath()); - c.rm(file2.getPath()); - System.out.println("Both the files have been deleted"); - } - else System.out.println("Files not found"); - channel.disconnect(); - c.disconnect(); - session.disconnect(); - - } - - - @Override - public boolean doesExist(String path/*, String env*/) throws Exception { - this.logger.debug("Looking if file "+path + " exists"); - JSch jsch = new JSch(); - Session session = null; - Channel channel = null; - ChannelSftp c = null; - boolean success = false; - Configuration stagingConfiguration = DMPMClientConfiguratorManager.getInstance().getStagingConfiguration(); - jsch.setKnownHosts("~/.ssh/known_hosts"); - String privateKey = "~/.ssh/id_rsa"; - - jsch.addIdentity(privateKey); - System.out.println("Private Key Added."); - - this.logger.debug("Staging configuration host "+stagingConfiguration.getHost()); - session = jsch.getSession("root",stagingConfiguration.getHost() ); - System.out.println("session created."); - - java.util.Properties config = new java.util.Properties(); - config.put("StrictHostKeyChecking", "no"); - - session.setConfig(config); - session.connect(); - - channel = session.openChannel("sftp"); - channel.connect(); - System.out.println("shell channel connected...."); - - c = (ChannelSftp) channel; - - //SftpATTRS is = null; - System.out.println(path); - - try { - c.lstat(path); - this.logger.debug("File found"); - success = true; - } catch (SftpException e) - { - this.logger.error("File not found",e); - - if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) - { - // file doesn't exist - success = false; - } - //success = true; // something else went wrong - } - channel.disconnect(); - c.disconnect(); - session.disconnect(); - this.logger.debug("Operation result "+success); - return success; - - } @Override - public void copyFromDmToSVN(File a/*,String env*/) throws Exception { - JSch jsch = new JSch(); - Session session = null; - SVNUpdater svnUpdater = new SVNUpdaterStaging(); - Configuration stagingConfiguration = DMPMClientConfiguratorManager.getInstance().getStagingConfiguration(); - - - jsch.setKnownHosts("~/.ssh/known_hosts"); - String privateKey = "~/.ssh/id_rsa"; - - jsch.addIdentity(privateKey); - System.out.println("Private Key Added."); - - session = jsch.getSession("root", stagingConfiguration.getHost()); - System.out.println("session created."); - - java.util.Properties config = new java.util.Properties(); - config.put("StrictHostKeyChecking", "no"); - - session.setConfig(config); - session.connect(); + protected void copyFromDmToSVN(File a) throws Exception{ + super.copyFromDmToSVN(a, new SVNUpdaterStaging()); - Channel channel = session.openChannel("sftp"); - channel.connect(); - - ChannelSftp sftp = (ChannelSftp) channel; - - sftp.cd(stagingConfiguration.getGhostAlgoDirectory()); - - System.out.println("REMOTE : "+stagingConfiguration.getGhostAlgoDirectory()+"/"+a.getName()); - System.out.println("LOCAL : /tmp/"+a.getName()); - - sftp.get(stagingConfiguration.getGhostAlgoDirectory()+"/"+a.getName(),"/tmp/"+a.getName()); - - channel.disconnect(); - session.disconnect(); - - File f = new File("/tmp/"+a.getName()); - svnUpdater.updateAlgorithmFiles(f); - f.delete(); } - + @@ -258,8 +74,15 @@ public class CheckMethodStaging extends CheckMethod{ //System.out.println(a.checkMethod("dataminer-proto-ghost.d4science.org", // "3a23bfa4-4dfe-44fc-988f-194b91071dd2-843339462")); -System.out.println(a.checkMethod("dataminer-ghost-d.dev.d4science.org", - "708e7eb8-11a7-4e9a-816b-c9ed7e7e99fe-98187548")); + try + { + a.checkMethod("dataminer-ghost-d.dev.d4science.org", + "708e7eb8-11a7-4e9a-816b-c9ed7e7e99fe-98187548"); + } catch (Exception e) + { + e.printStackTrace(); + } + //Algorithm aa = new Algorithm(); diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperProduction.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperProduction.java index 421d039..2b6b89a 100755 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperProduction.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperProduction.java @@ -8,22 +8,11 @@ public class NotificationHelperProduction extends NotificationHelper{ // private Exception executionException; + public NotificationHelperProduction() { + super ("[DataMinerGhostProductionInstallationRequestReport]"); + } - private String getSubjectHeader() { - return "[DataMinerGhostProductionInstallationRequestReport]"; - } - @Override - public String getSuccessSubject() { - return this.getSubjectHeader()+" is SUCCESS"; - } - - - - @Override - public String getFailedSubject() { - return String.format(this.getSubjectHeader()+" is FAILED"); - } diff --git a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperStaging.java b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperStaging.java index d0e50bd..372b55a 100755 --- a/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperStaging.java +++ b/src/main/java/org/gcube/dataanalysis/dataminer/poolmanager/util/impl/NotificationHelperStaging.java @@ -8,25 +8,11 @@ public class NotificationHelperStaging extends NotificationHelper { // private Exception executionException; + public NotificationHelperStaging() { + super ("[DataMinerGhostStagingInstallationRequestReport]"); + } + - private String getSubjectHeader() { - return "[DataMinerGhostStagingInstallationRequestReport]"; - } - - - @Override - public String getSuccessSubject() { - return this.getSubjectHeader()+" is SUCCESS"; - } - - - - - @Override - public String getFailedSubject() { - return String.format(this.getSubjectHeader()+" is FAILED"); - } - } diff --git a/src/main/resources/default.admins b/src/main/resources/default.admins new file mode 100755 index 0000000..4d3d2b5 --- /dev/null +++ b/src/main/resources/default.admins @@ -0,0 +1,6 @@ +1=ciro.formisano +2=lucio.lelii +3=roberto.cirillo +4=gianpaolo.coro +5=giancarlo.panichi +6=scarponi \ No newline at end of file