diff --git a/MHSEmulator/.gitignore b/MHSEmulator/.gitignore new file mode 100644 index 0000000000..5eb5c53762 --- /dev/null +++ b/MHSEmulator/.gitignore @@ -0,0 +1,2 @@ +out/ +*.jar diff --git a/MHSEmulator/out/SocketClient.jar b/MHSEmulator/out/SocketClient.jar deleted file mode 100644 index ad6f0e5f71..0000000000 Binary files a/MHSEmulator/out/SocketClient.jar and /dev/null differ diff --git a/MHSEmulator/out/SocketServer.jar b/MHSEmulator/out/SocketServer.jar deleted file mode 100644 index cefb2d8395..0000000000 Binary files a/MHSEmulator/out/SocketServer.jar and /dev/null differ diff --git a/MHSEmulator/src/mhs/core/MhsUtil.java b/MHSEmulator/src/mhs/core/MhsUtil.java index 236bc7c38e..06b1b105de 100644 --- a/MHSEmulator/src/mhs/core/MhsUtil.java +++ b/MHSEmulator/src/mhs/core/MhsUtil.java @@ -5,10 +5,30 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; +import java.io.IOException; import java.net.InetAddress; +import java.text.DecimalFormat; +import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Date; +/** + * Library module for MHS emulator. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ??? ??  ????            bphillip     Initial creation
+ * Jul 15, 2013  #2099     dgilling     Use safer exception handling for file I/O.
+ * 
+ * 
+ * + * @author bphillip + * @version 1.0 + */ public class MhsUtil { public static final SimpleDateFormat logDateFormat = new SimpleDateFormat( @@ -19,32 +39,51 @@ public class MhsUtil { public static final String END_TOKEN = "------!!!!END!!!!------"; - public static final File MY_MHS_FILE = new File( - "/awips2/.myMHS"); + public static final File MY_MHS_FILE = new File("/awips2/.myMHS"); - public static final File MSG_ID_FILE = new File( - "/awips2/.msgCount"); + public static final File MSG_ID_FILE = new File("/awips2/.msgCount"); - public static String getMsgId() throws Exception { - if (!MSG_ID_FILE.exists()) { - MSG_ID_FILE.createNewFile(); - BufferedWriter out = new BufferedWriter(new FileWriter(MSG_ID_FILE)); - out.write("0"); - out.close(); + private MhsUtil() { + throw new AssertionError(); + } + + public static String getMsgId() throws IOException { + if (MSG_ID_FILE.createNewFile()) { + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(MSG_ID_FILE)); + out.write("0"); + } finally { + if (out != null) { + out.close(); + } + } } + BufferedReader in = null; - in = new BufferedReader(new FileReader(MSG_ID_FILE)); - String msgId = in.readLine().trim(); - int newMsgNumber = Integer.parseInt(msgId) + 1; - in.close(); - BufferedWriter out = new BufferedWriter(new FileWriter(MSG_ID_FILE)); - out.write(String.valueOf(newMsgNumber)); - out.close(); - for (int i = msgId.length(); i < 6; i++) { - msgId = "0" + msgId; + int newMsgNumber; + try { + in = new BufferedReader(new FileReader(MSG_ID_FILE)); + String msgId = in.readLine().trim(); + newMsgNumber = Integer.parseInt(msgId) + 1; + } finally { + if (in != null) { + in.close(); + } } - return msgId; + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(MSG_ID_FILE)); + out.write(String.valueOf(newMsgNumber)); + } finally { + if (out != null) { + out.close(); + } + } + + NumberFormat formatter = new DecimalFormat("000000"); + return formatter.format(newMsgNumber); } public static int byteArrayToInt(byte[] b, int offset) { @@ -73,26 +112,26 @@ public class MhsUtil { logFile = new File(logDir + InetAddress.getLocalHost().getCanonicalHostName() + "-" + mode + "-" + MhsUtil.logDateFormat.format(new Date())); + logFile.createNewFile(); - if (logFile != null) { - if (!logFile.exists()) { - logFile.createNewFile(); - } - } message += MhsUtil.logMsgFormat.format(new Date()); for (Object obj : msg) { message += obj.toString() + " "; } message += "\n"; - BufferedWriter out = new BufferedWriter(new FileWriter(logFile, - true)); - out.write(message.trim()); - out.write("\n"); - out.close(); - + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(logFile, true)); + out.write(message.trim()); + out.write("\n"); + } finally { + if (out != null) { + out.close(); + } + } } catch (Exception e) { - // ignore + e.printStackTrace(); } } diff --git a/MHSEmulator/src/mhs/core/RsyncThread.java b/MHSEmulator/src/mhs/core/RsyncThread.java index a68224f9f1..b8c582a189 100644 --- a/MHSEmulator/src/mhs/core/RsyncThread.java +++ b/MHSEmulator/src/mhs/core/RsyncThread.java @@ -1,59 +1,68 @@ package mhs.core; import java.io.File; +import java.io.FileFilter; +import java.util.Collection; import java.util.HashMap; +import java.util.LinkedList; import java.util.Map; import java.util.Properties; -public class RsyncThread extends Thread { +/** + * TODO Add Description + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ??? ??  ????            bphillip     Initial creation
+ * Jul 15, 2013  #2099     dgilling     Modify to support recursive file listing
+ *                                      since export grids dir structure uses
+ *                                      multiple folders.
+ * 
+ * 
+ * + * @author bphillip + * @version 1.0 + */ +public class RsyncThread implements Runnable { + + private static final Map fileVersion = new HashMap(); private Properties props; - private Map fileVersion; - public RsyncThread(Properties props) { this.props = props; - fileVersion = new HashMap(); - this.setDaemon(true); } + @Override public void run() { - while (true) { - try { - Thread.sleep(1000); - } catch (Exception e) { - e.printStackTrace(); - } + String exportGridsDir = props.getProperty("EXPORT_GRIDS"); + String centralServerDir = props.getProperty("CENTRAL_SERVER"); + String packScriptDir = props.getProperty("UTIL_DIR"); - String exportGridsDir = (String) props.getProperty("EXPORT_GRIDS"); - String centralServerDir = (String) props - .getProperty("CENTRAL_SERVER"); - File[] fileList = new File(exportGridsDir).listFiles(); + Collection fileList = listCdfFiles(new File(exportGridsDir)); + for (File file : fileList) { + if (file.isFile()) { + String currentFilePath = file.getPath(); - String currentFilePath = null; - for (File file : fileList) { - if (file.isDirectory()) { - continue; + boolean copy = true; + if ((fileVersion.containsKey(currentFilePath)) + && (fileVersion.get(currentFilePath) >= file + .lastModified())) { + copy = false; } - currentFilePath = file.getPath(); - boolean copy = false; - if (fileVersion.containsKey(currentFilePath)) { - if (fileVersion.get(currentFilePath).longValue() != file - .lastModified()) { - copy = true; - } - } else { - copy = true; - } if (copy) { String[] copyCmd = new String[] { - centralServerDir + "/../util/packageFile",file.getPath(), - centralServerDir + "/../util/", - file.getName().substring(0, 3), centralServerDir }; + packScriptDir + "/packageFile", currentFilePath, + packScriptDir, file.getName().substring(0, 3), + centralServerDir }; try { Runtime.getRuntime().exec(copyCmd); - fileVersion.put(file.getPath(), file.lastModified()); + fileVersion.put(currentFilePath, file.lastModified()); } catch (Exception e) { e.printStackTrace(); } @@ -61,4 +70,34 @@ public class RsyncThread extends Thread { } } } + + private Collection listCdfFiles(File path) { + Collection fileList = new LinkedList(); + FileFilter cdfFilter = new FileFilter() { + + @Override + public boolean accept(File pathname) { + return (pathname.isDirectory() || pathname.getName().endsWith( + ".netcdf")); + } + }; + innerListFiles(path, fileList, cdfFilter); + return fileList; + } + + private void innerListFiles(File path, Collection fileList, + FileFilter filter) { + try { + File[] matchingFiles = path.listFiles(filter); + for (File file : matchingFiles) { + if (file.isDirectory()) { + innerListFiles(file, fileList, filter); + } else if (file.isFile()) { + fileList.add(file); + } + } + } catch (SecurityException e) { + e.printStackTrace(); + } + } } diff --git a/MHSEmulator/src/mhs/core/SocketSrv.java b/MHSEmulator/src/mhs/core/SocketSrv.java index a17e435ade..66b43ea1f3 100644 --- a/MHSEmulator/src/mhs/core/SocketSrv.java +++ b/MHSEmulator/src/mhs/core/SocketSrv.java @@ -1,5 +1,6 @@ package mhs.core; +import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; @@ -7,27 +8,63 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; +import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; +import java.net.UnknownHostException; +import java.text.DecimalFormat; +import java.text.NumberFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; +/** + * TODO Add Description + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * ??? ??  ????            bphillip     Initial creation
+ * Jul 15, 2013  #2099     dgilling     Code cleanup.
+ * 
+ * 
+ * + * @author bphillip + * @version 1.0 + */ public class SocketSrv { + private File propertiesFile; + + private boolean runRsync; + + private String myMHS; + + private Properties serverProps; + + private ExecutorService mhsRequestHandler; + + private ScheduledExecutorService rsyncThread; + private int fileIndex = 0; private String fileBase; - private Properties serverProps; - private String configDir; private String centralServerDir; @@ -38,131 +75,188 @@ public class SocketSrv { private Map commandMap; - private RsyncThread rsync; - - private String propertiesFile; - - private String myMHS; + private int serverPort; public static void main(String[] args) { - if (!System.getProperty("user.name").equals("root")) { System.out .println("Socket Server must be run as root user! Current user: " + System.getProperty("user.name")); System.exit(1); } + + File propertiesFile = new File(args[0]); + String mhsId = args[1]; + boolean startRsync = Boolean.parseBoolean(args[2]); + + if (!propertiesFile.isFile()) { + System.out.println("Specified properties file [" + + propertiesFile.toString() + "] does not exist. Exiting."); + System.exit(1); + } + try { - SocketSrv srv = null; - srv = new SocketSrv(args[0], args[1], args[2]); - srv.run(); + final SocketSrv server = new SocketSrv(propertiesFile, mhsId, + startRsync); + Runtime.getRuntime().addShutdownHook(new Thread() { + + @Override + public void run() { + server.shutdown(); + } + }); + server.run(); } catch (Exception e) { e.printStackTrace(); } } - private SocketSrv(String propertiesFile, String myMHS, String startRsync) - throws Exception { - this.propertiesFile = propertiesFile; - this.myMHS = myMHS; - - writeMyMHS(myMHS); + private SocketSrv(File propertiesFile, String mhsId, boolean startRsync) + throws UnknownHostException, IOException { System.out.println("Setting up server (" + InetAddress.getLocalHost().getCanonicalHostName() + ")"); - commandMap = new HashMap(); - configDir = propertiesFile.substring(0, - propertiesFile.lastIndexOf(File.separator) + 1); - loadProperties(true); - if (startRsync.equals("true")) { - System.out.println("Starting Rsync Thread..."); - rsync = new RsyncThread(serverProps); - rsync.start(); - System.out.println("Rsync Thread started!"); - } - } + this.propertiesFile = propertiesFile; + this.myMHS = mhsId; + this.runRsync = startRsync; - private void writeMyMHS(String myMHS) throws Exception { - BufferedWriter out = new BufferedWriter(new FileWriter( - MhsUtil.MY_MHS_FILE)); - out.write(myMHS + "\n"); - out.write(this.propertiesFile); - out.close(); - } + writeMyMHS(myMHS); - private void loadProperties(boolean print) throws Exception { - serverProps = new Properties(); - FileInputStream fis = new FileInputStream(propertiesFile); - serverProps.load(fis); - fis.close(); - fileBase = serverProps.getProperty("DATA_FOLDER"); - centralServerDir = serverProps.getProperty("CENTRAL_SERVER"); - binDir = serverProps.getProperty("UTIL_DIR"); + this.commandMap = new HashMap(); + this.configDir = this.propertiesFile.getParent(); + loadProperties(); loadRcvHandlerTable(); - if (print) { - System.out.println(" Received Data directory: " + fileBase); - System.out.println("Central Server Data Directory: " - + centralServerDir); - System.out.println(" Config directory: " + configDir); + + this.fileBase = serverProps.getProperty("DATA_FOLDER"); + this.centralServerDir = serverProps.getProperty("CENTRAL_SERVER"); + this.binDir = serverProps.getProperty("UTIL_DIR"); + this.serverPort = Integer.parseInt(serverProps + .getProperty("SERVER_PORT")); + + System.out.println("\tReceived Data directory: " + fileBase); + System.out.println("\tCentral Server Data Directory: " + + centralServerDir); + System.out.println("\tConfig directory: " + configDir); + + this.mhsRequestHandler = Executors.newSingleThreadExecutor(); + if (this.runRsync) { + System.out.println("Starting Rsync Thread..."); + this.rsyncThread = Executors.newSingleThreadScheduledExecutor(); } } - public void run() throws Exception { + public void run() throws IOException { + Runnable rsyncJob = new RsyncThread(serverProps); + rsyncThread.scheduleWithFixedDelay(rsyncJob, 1, 1, TimeUnit.SECONDS); - int port = Integer.parseInt((String) serverProps.get("SERVER_PORT")); - ServerSocket srv = new ServerSocket(port); + ServerSocket socket = new ServerSocket(serverPort); + while (!mhsRequestHandler.isShutdown()) { + try { + log("Waiting for connections..."); + final Socket conn = socket.accept(); + Runnable processTask = new Runnable() { - while (true) { - log("Waiting for connections..."); - Socket socket = srv.accept(); - InetSocketAddress client = (InetSocketAddress) socket - .getRemoteSocketAddress(); - log("Connected to client: " + client.getHostName() + " at " - + client); - loadProperties(false); - String sender = getMhsOfSender(client); - log("Message is from: " + sender); - - InputStream in = socket.getInputStream(); - byte[] message = null; - Map params = new HashMap(); - String flag = ""; - while (true) { - if (in.available() == 0) { - Thread.sleep(100); - continue; - } - - message = getMessage(in); - - if (message.length < 50) { - String strMessage = new String(message); - if (strMessage.equals(MhsUtil.END_TOKEN)) { - log("Disconnected from client: " + client); - if (params.containsKey("-c")) { - executeAction(sender, params); - files.clear(); - params.clear(); - flag = ""; + @Override + public void run() { + try { + handleRequest(conn); + } catch (Exception e) { + e.printStackTrace(); } - break; } - if (strMessage.startsWith("-")) { - flag = strMessage; - } else { - params.put(flag, strMessage); - } - } else { - log("File Received of size: " + message.length); - files.add(writeToFile(myMHS + "-" + params.get("-MSGID"), - message)); + }; + mhsRequestHandler.execute(processTask); + } catch (RejectedExecutionException e) { + if (!mhsRequestHandler.isShutdown()) { + e.printStackTrace(); } } } } + public void shutdown() { + mhsRequestHandler.shutdown(); + if (rsyncThread != null) { + rsyncThread.shutdown(); + } + } + + private void handleRequest(Socket connection) throws IOException, + InterruptedException { + InetSocketAddress client = (InetSocketAddress) connection + .getRemoteSocketAddress(); + log("Connected to client: " + client.getHostName() + " at " + client); + + loadProperties(); + String sender = getMhsOfSender(client); + log("Message is from: " + sender); + + InputStream in = connection.getInputStream(); + byte[] message = null; + Map params = new HashMap(); + String flag = ""; + while (true) { + if (in.available() == 0) { + Thread.sleep(100); + continue; + } + + message = getMessage(in); + + if (message.length < 50) { + String strMessage = new String(message); + if (strMessage.equals(MhsUtil.END_TOKEN)) { + log("Disconnected from client: " + client); + if (params.containsKey("-c")) { + executeAction(sender, params); + files.clear(); + params.clear(); + flag = ""; + } + break; + } + if (strMessage.startsWith("-")) { + flag = strMessage; + } else { + params.put(flag, strMessage); + } + } else { + log("File Received of size: " + message.length); + files.add(writeToFile(myMHS + "-" + params.get("-MSGID"), + message)); + } + } + } + + private void writeMyMHS(String myMHS) throws IOException { + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(MhsUtil.MY_MHS_FILE)); + out.write(myMHS + "\n"); + out.write(propertiesFile.getPath()); + } finally { + if (out != null) { + out.close(); + } + } + } + + private void loadProperties() throws IOException { + FileInputStream fis = null; + try { + fis = new FileInputStream(propertiesFile); + Properties newProps = new Properties(); + newProps.load(fis); + serverProps = newProps; + } finally { + if (fis != null) { + fis.close(); + } + } + } + private void executeAction(String sender, Map params) - throws Exception { + throws IOException, InterruptedException { int action = Integer.parseInt(params.get("-c")); if (!commandMap.containsKey(action)) { @@ -200,31 +294,19 @@ public class SocketSrv { command = command.replace("%SENDER", sender.toLowerCase()); String[] cmdArray = command.split(" "); log("Executing: " + command); - // - // Map sysEnv = System.getenv(); - // Map newEnv = new HashMap(); - // for (String key : sysEnv.keySet()) { - // newEnv.put(key, sysEnv.get(key)); - // } - // newEnv.put("PATH", "/awips2/python/bin/:"+sysEnv.get("PATH")); - // newEnv.put("LD_PRELOAD", "/awips2/python/lib/libpython2.7.so"); - // newEnv.put("LD_LIBRARY_PATH", "/awips2/python/lib"); - // String[] envp = new String[newEnv.keySet().size()]; - // int i = 0; - // for (String key : newEnv.keySet()) { - // envp[i] = key.trim() + "=" + newEnv.get(key).trim(); - // i++; - // } + Process p = null; try { p = Runtime.getRuntime().exec(cmdArray); p.waitFor(); } finally { - p.destroy(); + if (p != null) { + p.destroy(); + } } } - private byte[] getMessage(InputStream in) throws Exception { + private byte[] getMessage(InputStream in) throws IOException { byte[] sizeBytes = new byte[4]; readBytes(in, sizeBytes); int expectedSize = MhsUtil.byteArrayToInt(sizeBytes, 0); @@ -233,7 +315,7 @@ public class SocketSrv { return message; } - private void readBytes(InputStream in, byte[] bytes) throws Exception { + private void readBytes(InputStream in, byte[] bytes) throws IOException { int expectedSize = bytes.length; int bytesRead = 0; int totalBytesRead = 0; @@ -245,13 +327,20 @@ public class SocketSrv { } private String writeToFile(String fileName, byte[] contents) - throws Exception { + throws IOException, InterruptedException { String fileFQN = fileBase + fileName + "." + getFileIndex(); log("Writing file: " + fileFQN); - FileOutputStream fos = new FileOutputStream(new File(fileFQN)); - fos.write(contents); - fos.flush(); - fos.close(); + + BufferedOutputStream out = null; + try { + out = new BufferedOutputStream(new FileOutputStream(new File( + fileFQN))); + out.write(contents); + } finally { + if (out != null) { + out.close(); + } + } Process p = null; try { @@ -259,7 +348,9 @@ public class SocketSrv { new String[] { "/bin/chmod", "777", fileFQN }); p.waitFor(); } finally { - p.destroy(); + if (p != null) { + p.destroy(); + } } return fileFQN; } @@ -269,40 +360,34 @@ public class SocketSrv { if (fileIndex == 1000) { fileIndex = 0; } - String fileNumber = String.valueOf(fileIndex); - if (fileNumber.length() == 1) { - fileNumber = "00" + fileNumber; - } else if (fileNumber.length() == 2) { - fileNumber = "0" + fileNumber; - } - return fileNumber; + + NumberFormat formatter = new DecimalFormat("000"); + return formatter.format(fileIndex); } - private void loadRcvHandlerTable() throws Exception { + private void loadRcvHandlerTable() throws IOException { BufferedReader in = null; try { - in = new BufferedReader(new FileReader(configDir + in = new BufferedReader(new FileReader(configDir + File.separator + "rcv_handler.tbl")); - String str = null; - String[] tokens = null; + String str = null; while ((str = in.readLine()) != null) { - String command = ""; - tokens = str.split(" "); + StringBuilder commandBuilder = new StringBuilder(); + String[] tokens = str.split(" "); for (int i = 1; i < tokens.length; i++) { String cmd = tokens[i].trim(); if (!cmd.isEmpty()) { if (i != 1) { - command += " "; + commandBuilder.append(' '); } - command += cmd; + commandBuilder.append(cmd); } } - command = command.trim(); - commandMap.put(Integer.parseInt(tokens[0]), command); + String commandString = commandBuilder.toString().trim(); + commandMap.put(Integer.parseInt(tokens[0]), commandString); } - in.close(); } finally { if (in != null) { in.close(); @@ -311,20 +396,19 @@ public class SocketSrv { } private String getMhsOfSender(InetSocketAddress address) { - String hostAddress = address.getAddress().getHostAddress(); - for (Object key : serverProps.keySet()) { - String value = serverProps.getProperty((String) key); + for (String mhsId : serverProps.stringPropertyNames()) { + String value = serverProps.getProperty(mhsId); if (value.contains(",")) { String[] addrs = value.split(","); for (String addr : addrs) { if (addr.contains(hostAddress)) { - return (String) key; + return mhsId; } } } else { if (value.contains(hostAddress)) { - return (String) key; + return mhsId; } } } diff --git a/edexOsgi/build.edex/deploy-common/deploy-gfesuite.xml b/edexOsgi/build.edex/deploy-common/deploy-gfesuite.xml index 0d0876c744..7ac6c93d48 100644 --- a/edexOsgi/build.edex/deploy-common/deploy-gfesuite.xml +++ b/edexOsgi/build.edex/deploy-common/deploy-gfesuite.xml @@ -28,6 +28,10 @@ + + + + diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_grids b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_grids index 91d7f844bc..e198c67f0f 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_grids +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_grids @@ -10,6 +10,9 @@ # 04/29/13 #1761 dgilling Remove use of NATIONAL_CENTER, # script caller will determine # which sites to export. +# 05/16/13 #2009 dgilling New backup structure: +# PRIMARY_SITES go to exportgrids/primary/ +# and all other go to exportgrids/backup/. ############################################################################## if [ ${#AWIPS_HOME} = 0 ] @@ -114,9 +117,30 @@ else fi $LOGGER ${DB_NAME} +# use PRIMARY_SITES setting to determine NETCDF_PATH +IFS=',' read -ra PRI_SITES <<< "${PRIMARY_SITES}" +if [ ${#PRI_SITES[@]} -eq 0 ] +then + declare -a PRI_SITES=( "${AW_SITE_IDENTIFIER}" ) +fi +EXPORT_FOR_PRIMARY=0 +for primary_site in "${PRI_SITES[@]}" +do + primary_site=`echo $primary_site | tr [a-z] [A-Z]` + if [ "$primary_site" = "${CAPS_SITE}" ] + then + EXPORT_FOR_PRIMARY=1 + break + fi +done + +NETCDF_PATH=${GFESUITE_HOME}/exportgrids/primary +export NETCDF_TMP_PATH=/tmp/exportgrids +if [ $EXPORT_FOR_PRIMARY = 0 ] +then + NETCDF_PATH=${GFESUITE_HOME}/exportgrids/backup +fi -NETCDF_PATH=${GFESUITE_HOME}/exportgrids -export NETCDF_TMP_PATH=${NETCDF_PATH}/tmp if [ ! -d ${NETCDF_TMP_PATH} ]; then mkdir ${NETCDF_TMP_PATH} chmod 777 ${NETCDF_TMP_PATH}