Print

Print


Commit in java/sandbox/data-cat on MAIN
pom.xml+58added 472
scripts/hps_datacat_find.py+86added 472
       /hps_datacat_register_file.py+110added 472
src/main/java/org/srs/datacat/server/LcioContentChecker.java+94added 472
                                    /LcioContentCheckerCreator.java+14added 472
src/test/java/org/srs/datacat/server/LcioContentCheckerTest.java+33added 472
+395
6 added files
Module for work on SRS data catalog in ye olde sandbox.

java/sandbox/data-cat
pom.xml added at 472
--- java/sandbox/data-cat/pom.xml	                        (rev 0)
+++ java/sandbox/data-cat/pom.xml	2014-04-10 22:04:57 UTC (rev 472)
@@ -0,0 +1,58 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.hps</groupId>
+    <artifactId>hps-datacat-scratch</artifactId>
+    <version>0.1-SNAPSHOT</version>
+    <name>datacat-scratch</name>
+    
+    <repositories>
+<!--      
+        <repository>
+            <id>freehep-repo-public</id>
+            <name>FreeHEP Maven Public</name>
+            <url>http://srs.slac.stanford.edu/nexus/content/groups/freehep-maven2-public/</url>            
+        </repository>
+-->
+        <repository>
+            <id>srs-maven2-public</id>
+            <name>SRS Maven 2 central repository</name>
+            <url>http://srs.slac.stanford.edu/nexus/content/groups/srs-maven2-public/</url>
+        </repository>
+        <repository>
+            <id>lcsim-repo-public</id>
+            <name>LCSIM Public Maven Repository</name>
+            <url>http://srs.slac.stanford.edu/nexus/content/groups/lcsim-maven2-public/</url>
+        </repository>
+        <repository>
+            <id>maven-central-repo</id>
+            <name>Maven repository</name>
+            <url>http://repo1.maven.org/maven2/</url>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+    </repositories>
+   
+    <dependencies>
+        <dependency>
+            <groupId>org.lcsim</groupId>
+            <artifactId>lcsim-distribution</artifactId>
+            <version>3.0.4-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.lcsim</groupId>
+            <artifactId>lcio</artifactId>
+            <version>2.4.4-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>srs</groupId>
+            <artifactId>org-srs-datacat-server</artifactId>
+            <version>1.7.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+    
+</project>

java/sandbox/data-cat/scripts
hps_datacat_find.py added at 472
--- java/sandbox/data-cat/scripts/hps_datacat_find.py	                        (rev 0)
+++ java/sandbox/data-cat/scripts/hps_datacat_find.py	2014-04-10 22:04:57 UTC (rev 472)
@@ -0,0 +1,86 @@
+#!/usr/bin/env python2.7
+
+""" 
+Script wrapper for updating HPS data catalog via SSH connection to SLAC.
+
+author: Jeremy McCormick <[log in to unmask]> 
+"""
+
+# TODO: set properly Run Min, Run Max, and Events by dataset.
+
+import argparse, os.path, subprocess
+
+# path to script at SLAC
+script_cmd = '~srs/datacat/prod/datacat find'
+
+# default options for search command
+script_options = '--search-groups --recurse'
+
+# default SLAC account for SSH connection
+connection = [log in to unmask]
+
+# site
+site = 'SLAC'
+
+parser = argparse.ArgumentParser(description='Search for files in HPS data catalog')
+parser.add_argument('-p', '--path', help='root path for search')
+parser.add_argument('-s', '--site', help='dataset site')
+parser.add_argument('-c', '--connection', help='SSH connection')
+parser.add_argument('-o', '--output', help='save results to output file')
+parser.add_argument('-q', '--query', help='data query for filtering results')
+
+args = vars(parser.parse_args())
+    
+if args['path'] != None:
+    path = args['path']
+else:
+    raise Exception('path is required!')
+    
+if args['site'] != None:
+    site = args['site']
+    if site != 'SLAC' and site != 'JLAB':
+        raise Exception("Unrecognized site!")
+    
+if args['connection'] != None:
+    connection = args['connection']
+    
+output = None
+if args['output'] != None:
+    output = args['output']
+    if os.path.isfile(output):
+        raise Exception('Output file already exists!')
+    
+query = ''    
+if args['query'] != None:
+    #print args['query']
+    query = '--filter \'%s\'' % args['query'] 
+    print query
+                
+cmd = 'ssh %s %s %s --site %s %s %s' % (connection, script_cmd, script_options, site, query, path)
+
+print cmd
+
+if output != None:
+    output_file = open(output, 'w')
+
+process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+errors = []
+lines = []
+for line in process.stdout.readlines():
+    lines.append(line)
+    if 'Exception' in line:
+        errors.append(line)        
+        
+retval = process.wait()
+
+if (retval == 0 and len(errors) == 0):
+    if output != None:
+        for line in lines:
+            output_file.write(line)
+        output_file.close()       
+    else:
+        for line in lines:
+            print line,
+else:
+    print 'The find command failed with errors!'
+    print errors
\ No newline at end of file

java/sandbox/data-cat/scripts
hps_datacat_register_file.py added at 472
--- java/sandbox/data-cat/scripts/hps_datacat_register_file.py	                        (rev 0)
+++ java/sandbox/data-cat/scripts/hps_datacat_register_file.py	2014-04-10 22:04:57 UTC (rev 472)
@@ -0,0 +1,110 @@
+#!/usr/bin/env python2.7
+
+""" 
+Script wrapper for updating HPS data catalog via SSH connection to SLAC.
+
+author: Jeremy McCormick <[log in to unmask]> 
+"""
+
+# TODO: set properly Run Min, Run Max, and Events by dataset.
+
+import argparse, os.path, subprocess
+
+# path to script at SLAC
+script_cmd = '~srs/datacat/prod/datacat registerDataset'
+
+# default SLAC account for SSH connection
+connection = [log in to unmask]
+
+# lowest level node in directory hierarchy
+group = 'HPS'
+
+# site
+site = 'SLAC'
+
+parser = argparse.ArgumentParser(description='Register file in HPS data catalog')
+parser.add_argument('-p', '--path', help='destination path in data catalog')
+parser.add_argument('-d', '--dataset', help='input physical dataset')
+parser.add_argument('-m', '--metadata', nargs='*', help='define meta data')
+parser.add_argument('-g', '--group', help='dataset group')
+parser.add_argument('-s', '--site', help='dataset site')
+parser.add_argument('-c', '--connection', help='SSH connection')
+parser.add_argument('-v', '--verbose', help='turn verbose mode on', action='store_true')
+parser.add_argument('-D', '--dry-run', help='dry run only', action='store_true')
+args = vars(parser.parse_args())
+
+verbose = False
+if args['verbose'] != None:
+    verbose = True    
+
+if verbose:
+    print args
+    
+if args['path'] != None:
+    path = args['path']
+else:
+    raise Exception('path is required!')
+
+if args['dataset'] != None:
+    dataset = args['dataset']
+else:    
+    raise Exception('dataset is required!')
+
+ext = os.path.splitext(dataset)[1][1:]
+
+if args['group'] != None:
+    group = args['group']
+    
+metadata = ''
+if args['metadata'] != None:
+    print args['metadata']
+    for var in args['metadata']:
+        equals = var.find('=')
+        if (len(var) < 3 or equals < 0):
+            raise Exception("Bad meta data variable format!")
+        metadata += '--define %s ' % (var)
+
+if args['site'] != None:
+    site = args['site']
+    if site != 'SLAC' and site != 'JLAB':
+        raise Exception("Unrecognized site!")
+    
+if args['connection'] != None:
+    connection = args['connection']
+    
+dry_run = False
+if args['dry_run']:
+    dry_run = True
+                
+cmd = 'ssh %s %s --group %s --site %s %s %s %s %s' % (connection, script_cmd, group, site, metadata, ext, path, dataset)
+
+if verbose:
+    print cmd 
+
+if dry_run:
+    print 'Configured for dry run so command will not be executed.'
+else:
+    process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    errors = []
+    for line in process.stdout.readlines():
+        if verbose:
+            print line,
+        if 'Exception' in line:
+            errors.append(line)
+        
+    retval = process.wait()
+        
+    if len(errors) != 0 or retval != 0:
+        print 'The registration failed with errors!'
+        print errors            
+    else:
+        print 'Added data to catalog ...'
+        print '  dataset: %s' % dataset
+        print '  path: %s' % path
+        print '  group: %s' % group
+        #print '  metadata: ' % str(args['metadata'])
+        print '  site: ' % site
+    
+    print 'return value: %d' % retval
+    
+print 'Done!'    
\ No newline at end of file

java/sandbox/data-cat/src/main/java/org/srs/datacat/server
LcioContentChecker.java added at 472
--- java/sandbox/data-cat/src/main/java/org/srs/datacat/server/LcioContentChecker.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/srs/datacat/server/LcioContentChecker.java	2014-04-10 22:04:57 UTC (rev 472)
@@ -0,0 +1,94 @@
+package org.srs.datacat.server;
+
+import hep.lcio.event.LCEvent;
+import hep.lcio.implementation.io.LCFactory;
+import hep.lcio.io.ILCFactory;
+import hep.lcio.io.LCReader;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.Map;
+
+public class LcioContentChecker implements ContentChecker {
+    
+    private long minRunNumber = Integer.MAX_VALUE;
+    private long maxRunNumber = Integer.MIN_VALUE;
+    private long nevents = 0;
+    private String status;
+    private LinkedHashSet<String> collections;
+    Map<String, Object> metaData;
+        
+    @Override   
+    public void setLocation(long datasetVersion, URL url) throws IOException {
+        status = "OK";
+        collections = new LinkedHashSet<String>();
+        metaData = new HashMap<String, Object>();
+        if (!url.getProtocol().equals("file")) {
+            throw new IOException("Only file protocol is supported.");
+        }
+        LCReader reader = LCFactory.getInstance().createLCReader();        
+        reader.open(url.getPath());
+        LCEvent event = reader.readNextEvent();
+        minRunNumber = Integer.MAX_VALUE;
+        maxRunNumber = Integer.MIN_VALUE;        
+        while (event != null) {
+        
+            int thisRunNumber = event.getRunNumber();
+            
+            if (thisRunNumber < minRunNumber)
+                minRunNumber = thisRunNumber;
+            if (thisRunNumber > maxRunNumber)
+                maxRunNumber = thisRunNumber;
+            
+            collections.addAll(Arrays.asList(event.getCollectionNames()));
+            
+            nevents++;
+            
+            event = reader.readNextEvent();
+        }
+        
+        StringBuffer buff = new StringBuffer();
+        for (String collectionName : collections) {
+            buff.append(collectionName);
+            buff.append(',');
+        }
+        buff.setLength(buff.length() - 1);
+        
+        metaData.put("sCollections", buff.toString());
+        
+        reader.close();
+    }
+    
+    @Override
+    public long getEventCount() throws IOException {
+        return nevents;
+    }
+    
+    @Override
+    public long getRunMin() throws IOException {
+        return minRunNumber;
+    }
+    
+    @Override
+    public long getRunMax() throws IOException {
+        return maxRunNumber;        
+    }
+    
+    @Override
+    public String getStatus() throws IOException {
+        return status;
+    }
+    
+    @Override
+    public Map<String,Object> getMetaData() throws IOException {
+        return metaData;
+    }
+    
+    @Override
+    public void close()  throws IOException {        
+    }           
+}
\ No newline at end of file

java/sandbox/data-cat/src/main/java/org/srs/datacat/server
LcioContentCheckerCreator.java added at 472
--- java/sandbox/data-cat/src/main/java/org/srs/datacat/server/LcioContentCheckerCreator.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/srs/datacat/server/LcioContentCheckerCreator.java	2014-04-10 22:04:57 UTC (rev 472)
@@ -0,0 +1,14 @@
+package org.srs.datacat.server;
+
+
+public class LcioContentCheckerCreator implements ContentCheckerCreator {
+
+    public ContentChecker create() {
+        return new LcioContentChecker();
+    }
+    
+    public void free(ContentChecker cc) {
+        return;
+    }
+    
+}

java/sandbox/data-cat/src/test/java/org/srs/datacat/server
LcioContentCheckerTest.java added at 472
--- java/sandbox/data-cat/src/test/java/org/srs/datacat/server/LcioContentCheckerTest.java	                        (rev 0)
+++ java/sandbox/data-cat/src/test/java/org/srs/datacat/server/LcioContentCheckerTest.java	2014-04-10 22:04:57 UTC (rev 472)
@@ -0,0 +1,33 @@
+package org.srs.datacat.server;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Map;
+
+import org.lcsim.util.cache.FileCache;
+
+
+public class LcioContentCheckerTest {
+        
+    private static final String TEST_FILE_URL = "http://www.lcsim.org/test/hps/conditions_test.slcio";
+    
+    public void testLcioContentChecker() throws IOException {
+        
+        FileCache cache = new FileCache();
+        File file = cache.getCachedFile(new URL(TEST_FILE_URL));
+        
+        ContentChecker checker = new LcioContentCheckerCreator().create();
+        checker.setLocation(-1, file.toURL());
+        System.out.println("event count: " + checker.getEventCount());
+        System.out.println("run max: " + checker.getRunMax());
+        System.out.println("run min: " + checker.getRunMin());
+        System.out.println("status: " + checker.getStatus());        
+        System.out.println("meta data ...");
+        Map<String, Object> metaData = checker.getMetaData();
+        for (String key : metaData.keySet()) {
+            System.out.println("  " + key + ": " + metaData.get(key));
+        }
+    }
+
+}
SVNspam 0.1