diff options
196 files changed, 7 insertions, 12462 deletions
@@ -1,17 +1,7 @@ # PostgreSQL as a Service (PGaaS) DB VM. -This package is built on top of the stock PostgreSQL and Repmgr packages. +This package is not being used in R2 Beijing because of the move to Kubernetes with OOM. -PGaaS contains a set of configuration scripts, daemons, and administrative scripts -that allow PostgreSQL to be deployed, configured and managed by the DCAE Controller. -PGaaS may be deployed singly or in a cascaded cluster. +If you need this package, use the R1 Amsterdam release packages. -The running daemons provide health check and other information suitable for the -DCAE Controller and future dashboard access. - - -## Building the Code - -To build the code, use the "make build" command. - -To build the code and upload to a debian repository, use the "make debian" command. +I'm not removing the repo though because it is likely that we will need to add things in R3 Casablanca. diff --git a/cdf/src/cdf-prop-value/README.md b/cdf/src/cdf-prop-value/README.md deleted file mode 100644 index f83617e..0000000 --- a/cdf/src/cdf-prop-value/README.md +++ /dev/null @@ -1,53 +0,0 @@ -org.onap.dcae.cdf [^1] -====================== - -This repository contails two modules: -* `cdf-util`: a port of the support functions needed to support CdfPortValue command -* `cdf-prop-value` : contains only the CdfPortValue command - -## Building - -To build: -* `cd cdf-util-build; mvn package` - -## Usage - -Command: `/opt/cdf/bin/getpropvalue` - -`/opt/cdf/bin/getpropvalue [-x] -n property -f property-file` - Extract the named value from the given property-file (or full pathname[^2]) - -`/opt/cdf/bin/getpropvalue -e method [-n property] [-s salt] -v value` - Encrypt the given property with the given name and value - -`/opt/cdf/bin/getpropvalue -u value` - Decrypt the given value, expressed as a triple METHOD:HEXSALT:HEXVAL - -`/opt/cdf/bin/setencryptedvalues` (same as `/opt/cdf/bin/getpropvalue -E`) - Encrypt all lines that look like ENCRYPTME.METHOD.name=value - -## Examples - - # using config files: - - # echo ENCRYPTME.AES.input=bogus | /opt/cdf/bin/setencryptedvalues > testconfig.txt - - # cat testconfig.txt - input.x=AES:353438323235:bf046d8a3e8b12fb678f5dec1e9d5743 - - # /opt/cdf/bin/getpropvalue -x -n input -f /home/ht1659/src/cdf/testconfig.txt - bogus - - # No file: - - # /opt/cdf/bin/getpropvalue -e AES -v bogus - AES:34383638353831:0e699f0f818593e3adbc642efed20341 - - # /opt/cdf/bin/getpropvalue -u AES:323937323833:8d95d8803978c4b13497b394d56a4a9c - bogus - - - -[^1]: Version 1.0, 24 Dec 2015 - -[^2]: The property-file valued currently requires a rooted (full) pathname. diff --git a/cdf/src/cdf-prop-value/cdf-prop-value/pom.xml b/cdf/src/cdf-prop-value/cdf-prop-value/pom.xml deleted file mode 100644 index c88885a..0000000 --- a/cdf/src/cdf-prop-value/cdf-prop-value/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ -<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.onap.dcae.cdf</groupId> - <artifactId>cdf-prop-value</artifactId> - <packaging>jar</packaging> - <version>1.1.0-SNAPSHOT</version> - <name>cdf-prop-value</name> - <url>http://maven.apache.org</url> - - <dependencies> - <dependency> - <groupId>org.onap.dcae.cdf</groupId> - <artifactId>cdf-util</artifactId> - <version>1.1.0-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>3.8.1</version> - <scope>test</scope> - </dependency> - - </dependencies> - -</project> diff --git a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/.gitignore b/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/.gitignore deleted file mode 100644 index 9709069..0000000 --- a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -javadoc -javadocs.built -*.jar diff --git a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/makefile b/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/makefile deleted file mode 100644 index 194ca4c..0000000 --- a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/makefile +++ /dev/null @@ -1,33 +0,0 @@ -go=$$(find ~/.m2 -name '*getopt*.jar' | tail -1) -cu=../../../../cdf-util/src/main/java/cdf-util.jar - -.SUFFIXES= .class - -JAVA=org/onap/dcae/cdf/CdfPropValue.java -CLASSES=$(JAVA:.java=.class) - -JAR=cdf-prop-value.jar - -all: - -build: $(JAR) - -classes: $(CLASSES) - -clean: - find . -name '*.class' -exec rm -f {} + - rm -rf javadoc javadocs.built $(JAR) - -$(JAR): $(CLASSES) - rm -f $(JAR) - jar cvf $(JAR) $(CLASSES) - -$(CLASSES): $(JAVA) - javac -cp $(go):$(cu) $(JAVA) - -javadocs: javadocs.built -javadocs.built: $(JAR) - rm -rf javadoc - mkdir -p javadoc - javadoc -d javadoc -classpath $(go):$(cu) $(JAVA) - touch javadocs.built diff --git a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/org/onap/dcae/cdf/.gitignore b/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/org/onap/dcae/cdf/.gitignore deleted file mode 100644 index 6b468b6..0000000 --- a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/org/onap/dcae/cdf/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.class diff --git a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/org/onap/dcae/cdf/CdfPropValue.java b/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/org/onap/dcae/cdf/CdfPropValue.java deleted file mode 100644 index cd9a51c..0000000 --- a/cdf/src/cdf-prop-value/cdf-prop-value/src/main/java/org/onap/dcae/cdf/CdfPropValue.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf; - -import org.onap.dcae.cdf.util.config.PropValue; -import java.util.logging.Logger; -import org.onap.dcae.cdf.util.config.Configuration; -import java.io.InputStream; -import java.io.PrintStream; - -public class CdfPropValue extends PropValue { - public static String getCDFHOME() { - String optCdf = System.getProperty("CDF_HOME"); - if (optCdf == null) optCdf = System.getenv("CDF_HOME"); - if (optCdf == null) optCdf = "/opt/app/cdf"; - return optCdf; - } - - public static String getGLOBALPROPFILE() { - String optCdfCfg = System.getProperty("CDF_CFG"); - if (optCdfCfg == null) optCdfCfg = System.getenv("CDF_CFG"); - if (optCdfCfg == null) optCdfCfg = getCDFHOME() + "/lib/cdf.cfg"; - return optCdfCfg; - } - - public static void init() { - PropValue.setGlobalPropFile(getGLOBALPROPFILE()); - PropValue.setEncryptionKeyProperty("Global_Title"); - } - static { - init(); - } - - public static void printEncryptedProperty(String method, String name, String salt, String value, String globalPropFile) { - PropValue.printEncryptedProperty(method, name, salt, value, globalPropFile); - } - public static String generateEncryptedProperty(String method, String salt, String value, String globalPropFile) throws Exception { - return PropValue.generateEncryptedProperty(method, salt, value, globalPropFile); - } - public static String generateEncryptedProperty(String method, String salt, String value, PropValue propValue) throws Exception { - return PropValue.generateEncryptedProperty(method, salt, value, propValue); - } - public static void extractProperty(String f, String name, boolean encrypted) { - PropValue.extractProperty(f, name, encrypted); - } - public static void extractProperty(String f, String name, boolean encrypted, String globalPropFile) { - PropValue.extractProperty(f, name, encrypted, globalPropFile); - } - public static String decryptTriple(String triple, String globalPropFile) { - return PropValue.decryptTriple(triple, globalPropFile); - } - public static String decryptTriple(String triple, PropValue propValue) { - return PropValue.decryptTriple(triple, propValue); - } - public static void encryptInput(InputStream in, PrintStream out) throws Exception { - PropValue.encryptInput(in, out); - } - public static void encryptInput() throws Exception { - PropValue.encryptInput(); - } - public static void encryptInput(String globalPropFile, InputStream sysin, PrintStream sysout) throws Exception { - PropValue.encryptInput(globalPropFile, sysin, sysout); - } - public static void main(String args[]) throws Exception { - PropValue.main(args); - } - - - public CdfPropValue(Configuration globalConfig, Logger logger) { - super(globalConfig, logger); - } - -} diff --git a/cdf/src/cdf-prop-value/cdf-prop-value/src/test/java/org/onap/dcae/cdf/cdfpropvalue/AppTest.java b/cdf/src/cdf-prop-value/cdf-prop-value/src/test/java/org/onap/dcae/cdf/cdfpropvalue/AppTest.java deleted file mode 100644 index 64753bd..0000000 --- a/cdf/src/cdf-prop-value/cdf-prop-value/src/test/java/org/onap/dcae/cdf/cdfpropvalue/AppTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.cdfpropvalue; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/pom.xml b/cdf/src/cdf-prop-value/cdf-util/pom.xml deleted file mode 100644 index 0227504..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ -<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.onap.dcae.cdf</groupId> - <artifactId>cdf-util</artifactId> - <packaging>jar</packaging> - <version>1.1.0-SNAPSHOT</version> - <name>cdf-util</name> - <url>http://maven.apache.org</url> - - <dependencies> - <dependency> - <groupId>gnu.getopt</groupId> - <artifactId>java-getopt</artifactId> - <version>1.0.13</version> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>3.8.1</version> - <scope>test</scope> - </dependency> - </dependencies> -</project> diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/.gitignore b/cdf/src/cdf-prop-value/cdf-util/src/main/java/.gitignore deleted file mode 100644 index 87070e9..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -javadoc -*.jar diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/makefile b/cdf/src/cdf-prop-value/cdf-util/src/main/java/makefile deleted file mode 100644 index 71e77b3..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/makefile +++ /dev/null @@ -1,50 +0,0 @@ -go=$$(find ~/.m2 -name '*getopt*.jar' | tail -1) - -.SUFFIXES= .class - -JAVA= org/onap/dcae/cdf/util/common/Classify.java \ - org/onap/dcae/cdf/util/common/Tuple3.java \ - org/onap/dcae/cdf/util/common/AsHex.java \ - org/onap/dcae/cdf/util/common/G2CookieGen.java \ - org/onap/dcae/cdf/util/common/Compress.java \ - org/onap/dcae/cdf/util/common/Pair.java \ - org/onap/dcae/cdf/util/common/Tuple4.java \ - org/onap/dcae/cdf/util/common/Hostname.java \ - org/onap/dcae/cdf/util/common/Uid.java \ - org/onap/dcae/cdf/util/common/Tuple2.java \ - org/onap/dcae/cdf/util/common/Pid.java \ - org/onap/dcae/cdf/util/common/Convert.java \ - org/onap/dcae/cdf/util/common/Popen.java \ - org/onap/dcae/cdf/util/config/PropValue.java \ - org/onap/dcae/cdf/util/config/Configuration.java \ - org/onap/dcae/cdf/util/config/EncryptedConfiguration.java \ - org/onap/dcae/cdf/util/config/Configurable.java \ - org/onap/dcae/cdf/util/config/ConfigurationRegistry.java \ - org/onap/dcae/cdf/util/threads/TaskThread.java \ - org/onap/dcae/cdf/util/threads/ThreadUtils.java - -CLASSES=$(JAVA:.java=.class) - -JAR=cdf-util.jar - -all: - -build: $(JAR) - -$(JAR): $(CLASSES) - rm -f $(JAR) - jar cvf $(JAR) $(CLASSES) - -clean: - find . -name '*.class' -exec rm -f {} + - rm -rf javadoc javadocs.built - -$(CLASSES): $(JAVA) - javac -cp $(go) $(JAVA) - -javadocs: javadocs.built -javadocs.built: $(JAR) - rm -rf javadoc - mkdir -p javadoc - javadoc -d javadoc -classpath $(go) $(JAVA) - touch javadocs.built diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/.gitignore b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/.gitignore deleted file mode 100644 index 6b468b6..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.class diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/AsHex.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/AsHex.java deleted file mode 100644 index 05d8f37..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/AsHex.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -public class AsHex -{ - public static String asHex(byte[] data, int offset, int length, String sep) { - return asHex(data, offset, length, true); - } - public static String asHex(byte[] data, String sep) { - return asHex(data, 0, data.length, sep); - } - public static String asHex(byte[] data, int offset, int length) { - return asHex(data, offset, length, " "); - } - public static String asHex(byte[] data) { - return asHex(data, 0, data.length); - } - - public static String asHex(String data) { - return asHex(data.getBytes()); - } - - static private int asHexBlockLength = 16; - public static void setAsHexBlockLength(int n) { asHexBlockLength = n; } - public static int getAsHexBlockLength() { return asHexBlockLength; } - - private final static char[] hexdigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - - /** - * return a byte buf as a hex string - */ - public static String asHex(byte[] buf, int offset, int length, boolean addFinalNL) { - StringBuilder ret = new StringBuilder(); - return asHex(ret, buf, offset, length, addFinalNL).toString(); - } - - /** - * Return a byte buf as hex into the provided StringBuilder. - */ - public static StringBuilder asHex(StringBuilder ret, byte[] buf, int offset, int length, boolean addFinalNL) { - final int blockLength = asHexBlockLength; - for (int o = 0; o < length; o += blockLength) { - int iend = (o + blockLength < length) ? (o + blockLength) : length; - int pend = o + blockLength; - for (int i = o; i < iend; i++) { - int b = (int)(buf[i+offset] & 0xFF); - ret.append(hexdigits[b/16]); - ret.append(hexdigits[b%16]); - } - for (int i = iend; i < pend; i++) { - ret.append(" "); - } - ret.append(" "); - for (int i = o; i < iend; i++) { - byte b = buf[i+offset]; - int ib = (int)(b & 0xFF); - if ((ib >= 0x20) && (ib < 0x7f)) ret.append((char)b); - else ret.append('.'); - } - if (iend < length) ret.append('\n'); - } - if (addFinalNL && (length%blockLength != 0)) ret.append('\n'); - return ret; - } - - /** - * Return a byte buf as hex with a maximum number of lines. - */ - public static String asHexWithMaxLines(byte[] buf, int offset, int length, int maxLines, boolean addFinalNL) { - StringBuilder ret = new StringBuilder(); - return asHexWithMaxLines(ret, buf, offset, length, maxLines, addFinalNL).toString(); - } - - /** - * Return a byte buf as hex into the provided StringBuilder with a maximum number of lines. - */ - public static StringBuilder asHexWithMaxLines(StringBuilder ret, byte[] buf, int offset, int length, int maxLines, boolean addFinalNL) { - int bytesToPrint = length - offset; - if (maxLines < 1) maxLines = 1; - int maxBytesToPrint = maxLines * asHexBlockLength; - if (bytesToPrint <= maxBytesToPrint) { - return asHex(ret, buf, offset, length, addFinalNL); - } else { - if (bytesToPrint > maxBytesToPrint) bytesToPrint = maxBytesToPrint; - asHex(ret, buf, offset, offset + bytesToPrint, false); - ret.append(" ...."); - if (addFinalNL) ret.append("\n"); - return ret; - // return asHex(ret, buf, length - halfBytesToPrint, length, addFinalNL); - } - } - - // Convert a hex string back to a byte array. - // This assumes that there is no whitespace within the string. - // public static byte[] fromHex(String hexStr) { - // byte[] bts = new byte[hexStr.length() / 2]; - // for (int i = 0; i < bts.length; i++) { - // bts[i] = (byte) Integer.parseInt(hexStr.substring(2*i, 2*i+2), 16); - // } - // return bts; - // } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Classify.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Classify.java deleted file mode 100644 index e0b9203..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Classify.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -import java.lang.Character; - -/** - * Classify holds various checking functions. - */ -public final class Classify { - - /** - * isHex(ch) - is a character a hex value? - * - * @param ch (char) - * @return boolean - */ - public static boolean isHex(char ch) { - return (ch >= '0' && ch <= '9') || - (ch >= 'A' && ch <= 'F') || - (ch >= 'a' && ch <= 'f'); - } - - /** - * isValidGuid - * - * @param input (String) - * @return boolean - */ - - public static boolean isValidGuid(String input) { - // Checks if the GUID has the following format: "0f114b6f-3f1d-4c8f-a065-2a2ec3d0f522" - - if ( (input == null) || (input.length() != 36)) return false; - - for (int i=0; i < 36; i++) { - char c = input.charAt(i); - if ( (i==8 || i==13 || i==18 || i==23)) { - if (c != '-') return false; - } - else if (!isHex(c)) return false; - } - return true; - } - - - /** - * isValidClli - * - * @param input (String) - * @return boolean - */ - - public static boolean isValidClli(String input) { - // Checks if the CLLI only contains letters or digits. - - if (input == null) return false; - int len = input.length(); - if (len == 0) return false; - - for (int i=0; i < len; i++) { - char c = input.charAt(i); - if (!Character.isLetterOrDigit(c)) return false; - } - return true; - } - - - /** - * isValidCanonicalIpv4Address - * - * @param ipAddress (String) - * @return boolean - */ - - public static boolean isValidCanonicalIpv4Address(String ipAddress) { - - String[] parts = ipAddress.split( "\\." ); - - if ( parts.length != 4 ) { - return false; - } - for ( String s : parts ) { - try { - int i = Integer.parseInt( s ); - if ( (i < 0) || (i > 255) ) { - return false; - } - } catch (Exception ex) { - return false; - } - } - - return true; - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Compress.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Compress.java deleted file mode 100644 index 86ff60b..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Compress.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -import java.util.zip.GZIPOutputStream; -import java.util.zip.ZipOutputStream; -import java.util.zip.ZipEntry; -// import java.io.InputStream; -import java.io.FileOutputStream; -import java.io.FileInputStream; -import java.io.File; -import java.io.IOException; - -public class Compress { - - /** - * Compress a file with the gzip algorithm, sending output to outFilename. - * Based on code at http://www.java-tips.org/java-se-tips/java.util.zip/how-to-compress-a-file-in-the-gip-format.html. - */ - public static void gzip(String inFilename, String outFilename) throws IOException { - String tmpFilename = outFilename + ".tmp"; - try { - // Create the GZIP output stream - GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(tmpFilename)); - - // Open the input file - FileInputStream in = new FileInputStream(inFilename); - - // Transfer bytes from the input file to the GZIP output stream - byte[] buf = new byte[4096]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - - // Complete the GZIP file - out.finish(); - out.close(); - - // rename .gz.tmp to .gz - File target = new File(outFilename); - if (target.exists()) target.delete(); - File file = new File(tmpFilename); - boolean result = file.renameTo(target); - if (!result) throw new IOException("Cannot rename " + tmpFilename + " to " + outFilename); - } catch (IOException e) { - // If we can't write the gzip file, remove it and pass on the exception. - File f = new File(outFilename); - f.delete(); - throw e; - } - } - - /** - * Compress a file with the gzip algorithm, sending output to filename+".gz". - */ - public static void gzip(String filename) throws IOException { - gzip(filename, filename + ".gz"); - } - - /** - * Compress a file with the zip algorithm, sending output to outFilename - * Based on code at http://www.java-tips.org/java-se-tips/java.util.zip/how-to-compress-a-file-in-the-gip-format.html. - */ - public static void zip(String inFilename, String outFilename) throws IOException { - String tmpFilename = outFilename + ".tmp"; - try { - // Create the ZIP output stream - ZipOutputStream out = new ZipOutputStream(new FileOutputStream(tmpFilename)); - ZipEntry zipEntry = new ZipEntry(inFilename); - out.putNextEntry(zipEntry); - - // Open the input file - FileInputStream in = new FileInputStream(inFilename); - - // Transfer bytes from the input file to the ZIP output stream - byte[] buf = new byte[4096]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - - // Complete the ZIP file - out.finish(); - out.close(); - - // rename .zip.tmp to .zip - File target = new File(outFilename); - if (target.exists()) target.delete(); - File file = new File(tmpFilename); - boolean result = file.renameTo(target); - if (!result) throw new IOException("Cannot rename " + tmpFilename + " to " + outFilename); - } catch (IOException e) { - // If we can't write the zip file, remove it and pass on the exception. - File f = new File(outFilename); - f.delete(); - throw e; - } - } - - /** - * Compress a file with the gzip algorithm, sending output to filename+".zip". - */ - public static void zip(String filename) throws IOException { - zip(filename, filename + ".zip"); - } - - public static void main(String args[]) throws Exception { - if (args.length == 1) { - gzip(args[0]); - zip(args[0]); - } else { - System.err.println("Usage: java Compress filename"); - } - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Convert.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Convert.java deleted file mode 100644 index 6182fde..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Convert.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -import java.lang.Character; - -/** - * Covert holds various conversion functions. - */ -public final class Convert { - - private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray(); - - /** - * toHexString(String) - convert a string into its hex equivalent - */ - public static String toHexString(String buf) { - if (buf == null) return ""; - return toHexString(buf.getBytes()); - } - - /** - * toHexString(byte[]) - convert a byte-string into its hex equivalent - */ - public static String toHexString(byte[] buf) { - if (buf == null) return ""; - char[] chars = new char[2 * buf.length]; - for (int i = 0; i < buf.length; ++i) { - chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4]; - chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F]; - } - return new String(chars); - } - - // alternate implementation that's slightly slower - // protected static final byte[] Hexhars = { - // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' - // }; - // public static String encode(byte[] b) { - // StringBuilder s = new StringBuilder(2 * b.length); - // for (int i = 0; i < b.length; i++) { - // int v = b[i] & 0xff; - // s.append((char)Hexhars[v >> 4]); - // s.append((char)Hexhars[v & 0xf]); - // } - // return s.toString(); - // } - - /** - * Convert a hex string to its equivalent value. - */ - public static String stringFromHex(String hexString) throws Exception { - if (hexString == null) return ""; - return stringFromHex(hexString.toCharArray()); - } - - public static String stringFromHex(char[] hexCharArray) throws Exception { - if (hexCharArray == null) return ""; - return new String(bytesFromHex(hexCharArray)); - } - - public static byte[] bytesFromHex(String hexString) throws Exception { - if (hexString == null) return new byte[0]; - return bytesFromHex(hexString.toCharArray()); - } - - public static byte[] bytesFromHex(char[] hexCharArray) throws Exception { - if (hexCharArray == null) return new byte[0]; - int len = hexCharArray.length; - if ((len % 2) != 0) throw new Exception("Odd number of characters: '" + hexCharArray + "'"); - byte [] txtInByte = new byte [len / 2]; - int j = 0; - for (int i = 0; i < len; i += 2) { - txtInByte[j++] = (byte)(((fromHexDigit(hexCharArray[i], i) << 4) | fromHexDigit(hexCharArray[i+1], i)) & 0xFF); - } - return txtInByte; - } - - protected final static int fromHexDigit(char ch, int index) throws Exception { - int digit = Character.digit(ch, 16); - if (digit == -1) throw new Exception("Illegal hex character '" + ch + "' at index " + index); - return digit; - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/G2CookieGen.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/G2CookieGen.java deleted file mode 100644 index 738fb3c..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/G2CookieGen.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -import javax.crypto.Cipher; -// import javax.crypto.SecretKey; -// import javax.crypto.KeyGenerator; -// import javax.crypto.spec.IvParameterSpec; -import java.security.Key; -// import java.security.NoSuchAlgorithmException; -// import java.security.SecureRandom; -// import javax.crypto.SecretKey; -// import sun.misc.*; -import java.util.*; - -public class G2CookieGen -{ - private Cipher cipher; - private Key key = null; - - private static String alg = "DES"; - private static String desecb = "DES/ECB/PKCS5Padding"; - - public static String G2_CLIENT_MEC_ID_1 = "MEC0001"; - private static String G2_CLIENT_MEC_ID_2 = "MEC0002"; - public static String G2_ENCRYPT_KEY = "secretK9"; - public static String G2_EPOCH_TM_STR = null; - - - private static long G2_TM_DELTA_IN_MILLISECONDS = 10*60*1000; - - class G2WSSKey implements Key - { - private final byte[] keyBytes; - private final String alg; - - G2WSSKey(String algorithm, byte[] keyBytes) - { - this.alg = algorithm; - this.keyBytes = keyBytes; - } - - public String getAlgorithm() - { - return alg; - } - public String getFormat() - { - return "RAW"; - } - public byte[] getEncoded() - { - return (byte[])keyBytes.clone(); - } - } - - - public G2CookieGen() { - try { - cipher = Cipher.getInstance(desecb); - } catch (Throwable t) { - System.err.println(t.toString()); - return; - } - } - - - public static String getClient1MacId() { - return G2_CLIENT_MEC_ID_1; - } - - public static String getClient2MacId() { - return G2_CLIENT_MEC_ID_2; - } - - public static String toHexStringFromByteArray(byte[] bytes) - { - StringBuilder retString = new StringBuilder(); - for (int i = 0; i < bytes.length; ++i) { - retString.append(Integer.toHexString(0x0100 + (bytes[i] & 0x00FF)).substring(1)); - } - return retString.toString(); - } - - public static byte[] toByteArrayFromHexString(String hexStr) - { - byte[] bts = new byte[hexStr.length() / 2]; - for (int i = 0; i < bts.length; i++) { - bts[i] = (byte) Integer.parseInt(hexStr.substring(2*i, 2*i+2), 16); - } - return bts; - } - - public byte[] encryptData(String sData) - { - try { - byte[] data = sData.getBytes(); - //System.out.println("Original data : " + new String(data)); - if (key == null) setKey(G2_ENCRYPT_KEY); - cipher.init(Cipher.ENCRYPT_MODE, key); - byte[] result = cipher.doFinal(data); - return result; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public String decryptData(byte[] sData) - { - try { - cipher.init(Cipher.DECRYPT_MODE, key); - byte[] result = cipher.doFinal(sData); - return new String(result); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public String constructCookie(String mechId) { - return mechId + ":" + System.currentTimeMillis(); - } - - public void setKey(String g2EncryptKey) { - key = new G2WSSKey(this.alg, g2EncryptKey.getBytes()); - } - - public String getEncryptedCookie(String mechId, String g2EncryptKey) { - setKey(g2EncryptKey); - String tmp = constructCookie(mechId); - byte[] byteArray = this.encryptData(tmp); - return this.toHexStringFromByteArray(byteArray); - } - - public long getTimeMillisFromCookie(String cookie) { - StringTokenizer tkn = new StringTokenizer(cookie,":"); - String tmStr = null; - while (tkn.hasMoreTokens()) { - tmStr = tkn.nextToken(); - } - Long tmLong = new Long(tmStr); - return tmLong.longValue(); - } - - public boolean isValid(long tm) { - long ctm = System.currentTimeMillis(); -System.out.println("Current Time="+ctm); -System.out.println("G2_TM_DELTA_IN_MILLISECONDS="+G2_TM_DELTA_IN_MILLISECONDS); - if ( Math.abs(ctm - tm) <= G2_TM_DELTA_IN_MILLISECONDS ) { - return true; - } - return false; - } - - - public static void main(String argv[]) { - try { - if (argv.length > 0) { -System.out.println("using Client MACID="+argv[0]); - G2_CLIENT_MEC_ID_1 = argv[0]; - - } - - if (argv.length > 1) { - if (argv[1].length() == 8) { -System.out.println("using Key="+argv[1]); - G2_ENCRYPT_KEY = argv[1]; - } - } - - if (argv.length > 2) { -System.out.println("using Epoch Time (in seconds) ="+argv[2]); - G2_EPOCH_TM_STR = argv[2]; - } - - - G2CookieGen wssc = new G2CookieGen(); - -// System.out.println("tz_diff="+G2_CLIENT_TM_ZONE_TO_PDT_IN_MILLISECONDS); -System.out.println("macid="+G2_CLIENT_MEC_ID_1); - - String cookie = wssc.constructCookie(G2_EPOCH_TM_STR); -System.out.println("original cookie="+cookie); - - byte[] byteArrary = wssc.encryptData(cookie); - String hexString = wssc.toHexStringFromByteArray(byteArrary); -System.out.println("encrypted cookie="+hexString); - System.exit(0); - - } catch (Exception e) { - System.err.println("Error: " + e); - System.exit(1); - } - } /* main */ -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Hostname.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Hostname.java deleted file mode 100644 index 4385c01..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Hostname.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -import java.net.InetAddress; - -public class Hostname { - - /** - * Hostname FQDN - */ - public static String getHostName() { - return getHostName("unknown.unknown"); - } - - /** - * Hostname FQDN - */ - public static String getHostName(String def) { - return (uname == null) ? def : hostName; - } - - /** - * uname, the 1st portion of the hostname FQDN - */ - public static String getUname() { - return getUname("unknown"); - } - - /** - * uname, the 1st portion of the hostname FQDN - */ - public static String getUname(String def) { - return (uname == null) ? def : uname; - } - - /** - * Get an IP address for this machine - */ - public static String getLocalIP() { - return defaultLocalIP; - } - /** - * Get an IP address for this machine - */ - public static String getLocalIPinHex() { - return defaultLocalIPinHex; - } - /** - * Get a host name for this machine - */ - public static String getCanonicalHostName() { - return defaultCanonicalHostName; - } - - /** - * Value returned by getLocalIP() method - */ - private static String defaultLocalIP; - private static String defaultLocalIPinHex; - private static String defaultCanonicalHostName; - private static String hostName = null; // Hostname FQDN - private static String uname = null; // Hostname 1st part - - static { - try { - InetAddress ia = InetAddress.getLocalHost(); - defaultLocalIP = ia.getHostAddress(); - byte b[] = ia.getAddress(); - defaultLocalIPinHex = Convert.toHexString(b); - defaultCanonicalHostName = ia.getCanonicalHostName(); - } catch (Exception e) { - defaultLocalIP = "127.0.0.1"; - defaultLocalIPinHex = "7F000001"; - defaultCanonicalHostName = "localhost"; - } - - try { - hostName = InetAddress.getLocalHost().getHostName(); - String hostNameParts[] = hostName.split("\\."); - uname = hostNameParts[0]; - } catch (Exception ex) { - } - int dotInHostname = hostName.indexOf('.'); - if (dotInHostname > -1) hostName = hostName.substring(0, dotInHostname); - } - - public static void main(String args[]) { - System.out.println("getHostName() = '" + getHostName() + "'"); - System.out.println("getUname() = '" + getUname() + "'"); - System.out.println("getLocalIP() = '" + getLocalIP() + "'"); - System.out.println("getLocalIPinHex() = '" + getLocalIPinHex() + "'"); - System.out.println("getCanonicalHostName() = '" + getCanonicalHostName() + "'"); - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Pair.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Pair.java deleted file mode 100644 index 5a2a3f4..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Pair.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -public final class Pair<L,R> { - public final L left; - public final R right; - public Pair(L l, R r) { left = l; right = r; } - - @Override - public boolean equals(Object obj) { - Pair<L,R> o = (Pair<L,R>)obj; - return left.equals(o.left) && right.equals(o.right); - } - @Override - public String toString() { - return "(" + left + "," + right + ")"; - } - @Override - public int hashCode() { - return left.hashCode() + right.hashCode(); - } - - public static <L,R> Pair<L,R> of(L l, R r) { - return new Pair<L,R>(l, r); - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Pid.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Pid.java deleted file mode 100644 index c405c44..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Pid.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; -import java.io.File; - -public class Pid { - /** - * Return the pid. - */ - public static int getPid() { return pid; } - public static String getPidStr() { return pidStr; } - - private static int pid; - private static String pidStr; - static { - try { - pid = Integer.parseInt( ( new File("/proc/self")).getCanonicalFile().getName() ); - pidStr = Integer.toString(pid); - } catch (java.io.IOException e) { - pid = -1; - pidStr = "-1"; - } - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Popen.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Popen.java deleted file mode 100644 index d7f5846..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Popen.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.IOException; - -public class Popen { - public static class Results { - public final String stdout, stderr; - public final int exitValue; - public Results(String so, String se, int e) { - stdout = so; stderr = se; exitValue = e; - } - } - - public static Results popen(String cmd) throws java.io.IOException, java.lang.InterruptedException { - return popen(cmd, null); - } - - public static Results popen(String cmd, String stdin) throws java.io.IOException, java.lang.InterruptedException { - Process process = Runtime.getRuntime().exec(cmd); - return proc(process, stdin); - } - - public static Results popen(String[] args) throws java.io.IOException, java.lang.InterruptedException { - return popen(args, null); - } - - public static Results popen(String[] args, String stdin) throws java.io.IOException, java.lang.InterruptedException { - Process process = Runtime.getRuntime().exec(args); - return proc(process, stdin); - } - - private static Results proc(Process process, String stdin) throws java.io.IOException, java.lang.InterruptedException { - OutputStream pinput = process.getOutputStream(); - InputStream poutput = process.getInputStream(); - InputStream perror = process.getErrorStream(); - - if (stdin != null) - pinput.write(stdin.getBytes()); - pinput.close(); - - String stdout = captureStream(poutput); - poutput.close(); - String stderr = captureStream(perror); - perror.close(); - process.waitFor(); - // System.out.println("stdin=\nnvvvvvvvvvvvvvvvv\n"); - // System.out.println(stdin); - // System.out.println("^^^^^^^^^^^^^^^^"); - // System.out.println("stdout=\nvvvvvvvvvvvvvvvv\n"); - // System.out.println(stdout); - // System.out.println("^^^^^^^^^^^^^^^^"); - // System.out.println("stderr=\nvvvvvvvvvvvvvvvv\n"); - // System.out.println(stderr); - // System.out.println("^^^^^^^^^^^^^^^^"); - return new Results(stdout, stderr, process.exitValue()); - } - - private static String captureStream(InputStream inp) throws java.io.IOException { - byte[] buf = new byte[8192]; - StringBuffer out = new StringBuffer(); - int b; - while ((b = inp.read(buf)) > 0) { - out.append(new String(buf, 0, b)); - } - return out.toString(); - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple2.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple2.java deleted file mode 100644 index f4fd441..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple2.java +++ /dev/null @@ -1,25 +0,0 @@ -// -*- indent-tabs-mode: nil -*- -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -public class Tuple2<T1,T2> { - public Tuple2(T1 n1, T2 n2) { - t1 = n1; t2 = n2; - } - public final T1 t1; - public final T2 t2; -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple3.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple3.java deleted file mode 100644 index 566f910..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple3.java +++ /dev/null @@ -1,29 +0,0 @@ -// -*- indent-tabs-mode: nil -*- -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -public class Tuple3<T1,T2,T3> extends Tuple2<T1,T2> { - public Tuple3(T1 n1, T2 n2, T3 n3) { - super(n1, n2); - t3 = n3; - } - public Tuple3(Tuple3<T1,T2,T3> t) { - super(t.t1, t.t2); - t3 = t.t3; - } - public final T3 t3; -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple4.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple4.java deleted file mode 100644 index c41d64c..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Tuple4.java +++ /dev/null @@ -1,29 +0,0 @@ -// -*- indent-tabs-mode: nil -*- -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; - -public class Tuple4<T1,T2,T3,T4> extends Tuple3<T1,T2,T3> { - public Tuple4(T1 n1, T2 n2, T3 n3, T4 n4) { - super(n1, n2, n3); - t4 = n4; - } - public Tuple4(Tuple4<T1,T2,T3,T4> t) { - super(t.t1, t.t2, t.t3); - t4 = t.t4; - } - public final T4 t4; -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Uid.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Uid.java deleted file mode 100644 index 99feeb3..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/common/Uid.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.common; -import java.io.File; -import java.io.BufferedReader; -import java.io.FileReader; -import org.onap.dcae.cdf.util.common.Popen; - -public class Uid { - /** - * Return the uid. - */ - public static int getUid() { return uid; } - public static String getUidStr() { return uidStr; } - - private static int uid = -1; - private static String uidStr = ""; - static { - try { - uid = getUidFromProcSelfStatus(); - if (uid == -1) uid = getUidFromIdU(); - uidStr = Integer.toString(uid); - } catch (java.io.IOException e) { - uid = -1; - uidStr = "-1"; - System.err.println("Exception: " + e); - } catch (Exception e) { - System.err.println("Exception: " + e); - } - - } - - private static int getUidFromProcSelfStatus() throws java.io.IOException { - int uid = -1; - if (true) return -1; - BufferedReader br = new BufferedReader(new FileReader(new File("/proc/self/status"))); - String thisLine = null; - while ((thisLine = br.readLine()) != null) { - if (thisLine.startsWith("Uid:")) { - String[] uids = thisLine.split("[: \t]+"); - if (uids.length > 1) { - uid = Integer.parseInt(uids[1]); - break; - } - } - } - br.close(); - return uid; - } - - private static int getUidFromIdU() throws java.io.IOException, java.lang.InterruptedException { - Popen.Results results = Popen.popen("/usr/bin/id -u"); - uid = Integer.parseInt(results.stdout.trim()); - return uid; - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/.gitignore b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/.gitignore deleted file mode 100644 index 6b468b6..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.class diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/Configurable.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/Configurable.java deleted file mode 100644 index 29f709d..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/Configurable.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.config; - -/** - * The interface for an object that wants to be notified when the - * configuration files have changed (so it can re-configure itself) - */ - -public interface Configurable { - /** - * Configuration files have changed. - */ - public void reConfigure(); -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/Configuration.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/Configuration.java deleted file mode 100644 index db54276..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/Configuration.java +++ /dev/null @@ -1,579 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.config; - -import java.io.*; -import java.util.*; -import java.net.*; -import java.util.logging.*; -import org.onap.dcae.cdf.util.common.*; -import org.onap.dcae.cdf.util.threads.*; - -/** - * Class to monitor configuration parameters and notify - * other objects when they change - */ - -public class Configuration extends Thread implements Configurable { - /** - * Time between checks of config file in milliseconds - */ - private static int INTERVAL = 30000; - private int interval = INTERVAL; - /** - * Minimum age of config file before loading it in milliseconds - */ - private static final int MINAGE = 30000; - private int minage = MINAGE; - /** - * Value returned by getInstance() method - */ - private static Configuration defaultInstance = new Configuration(); - /** - * Value returned by getLocalIP() method - */ - private static String defaultLocalIP; - private static String defaultLocalIPinHex; - private static String defaultCanonicalHostName; - static { - try { - InetAddress ia = InetAddress.getLocalHost(); - defaultLocalIP = ia.getHostAddress(); - byte b[] = ia.getAddress(); - defaultLocalIPinHex = Convert.toHexString(b); - defaultCanonicalHostName = ia.getCanonicalHostName(); - } catch (Exception e) { - defaultLocalIP = "127.0.0.1"; - defaultLocalIPinHex = "7F000001"; - defaultCanonicalHostName = "localhost"; - } - } - /** - * Get an IP address for this machine - */ - public static String getLocalIP() { - return defaultLocalIP; - } - /** - * Get an IP address for this machine - */ - public static String getLocalIPinHex() { - return defaultLocalIPinHex; - } - /** - * Get a host name for this machine - */ - public static String getCanonicalHostName() { - return defaultCanonicalHostName; - } - /** - * Get a default global instance - */ - public static Configuration getInstance() { - return defaultInstance; - } - /** - * The current configuration - */ - private ResourceBundle config; - /** - * Where to log when things go wrong - */ - private static Logger logger = Logger.getLogger(Configuration.class.getName()); - /** - * The config file to read - */ - private File file; - /** - * The name of the config to read, when overriding the file. - */ - private String filename; - /** - * The last modified date of the config file - */ - private long curdate; - /** - * Should we stop scanning for config file updates? - */ - private boolean closed; - static boolean closeAll = false; - /** - * Have we started scanning for config file updates? - */ - private boolean initialized; - /** - * The name of the background thread monitoring the file. - */ - private static String monitorThreadName = "Configuration Monitor"; - /** - * How we keep track of registered Configurables. - */ - private ConfigurationRegistry configurationRegistry = new ConfigurationRegistry(); - /** - * included file. - */ - private Configuration subConfig = null; - private String subFile = null; - - public void reConfigure() { - configurationRegistry.reConfigureAll(logger); - } - - /** - * Create an instance using the default configuration file - * "configfile.properties" from the class path - */ - public Configuration() { - // logger.fine("Configuration()"); - } - /** - * Create an instance using a configuration file - * "FILENAME.properties" from the class path - */ - public Configuration(String filename) { - // logger.fine("Configuration(" + filename + ")"); - this.filename = filename; - } - /** - * Create an instance using a specific configuration file - */ - public Configuration(File file) { - this.file = file; - // logger.fine("Configuration(File)"); - } - - /** - * Change the configuration file to use - */ - public void setConfig(File file) { - this.file = file; - curdate = 0; - interrupt(); - } - /** - * Reset the interval used for rechecking the file. - * @param interval - */ - public synchronized void setInterval(int interval) { - this.interval = interval; - } - /** - * Reset the default interval used for rechecking the file. - * @param interval - */ - public synchronized void setDefaultInterval(int interval) { - this.INTERVAL = interval; - } - /** - * Reset the minimum age the file must be before being reread. - * This is used to prevent reading the file while it is being written, say by vi. - * @param minage - */ - public synchronized void setMinage(int minage) { - this.minage = minage; - } - /** - * Stop checking for config changes - */ - public void close() { - checkinit(); - closed = true; - if (Thread.currentThread() == this) { - return; - } - interrupt(); - try { - join(); - } catch (Exception e) { - } - } - /** - * Check the config file to see if it has changed - */ - private synchronized void check() { - long now = System.currentTimeMillis(); - if (logger.isLoggable(Level.FINE)) logger.fine("check(): now=" + Long.toString(now)); - try { - long ndate = file.lastModified(); - if (logger.isLoggable(Level.FINE)) logger.fine("file=" + file + ", ndate=" + Long.toString(ndate) + ", curdate=" + Long.toString(curdate,10)); - if (ndate == curdate || (now < ndate + minage && curdate != 0)) { - return; - } - if (logger.isLoggable(Level.FINE)) logger.fine("reloading file=" + file); - FileInputStream in = new FileInputStream(file); - config = new PropertyResourceBundle(in); - in.close(); - try { - String inc = config.getString("include"); - if ((inc != null) && !inc.equals("")) { - subFile = inc; - subConfig = new Configuration(subFile); - subConfig.registerConfigurable(this); - } - } catch (Exception e) { - } - - curdate = ndate; - configurationRegistry.reConfigureAll(logger); - // logger.info("CNFG0006: Configuration '" + file + "' reloaded"); - } catch (Exception e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0004: Configuration file '" + file + "' inaccessible", e); - } - } - /** - * Make sure we're initialized and read the config file - * if necessary - */ - public void checkinit() { - // System.out.println("checkinit()"); - if (initialized) { - return; - } - initialized = true; - try { - if (file == null) { - if (filename == null) - filename = System.getProperty("configfile", "configfile"); - // logger.info("DAIS0073 0.8.73 >>> filename=" + filename); - if (filename.charAt(0) == '/') { - // logger.info("DAIS0073 0.8.73 filename has leading slash: " + filename); - file = new File(filename); - } else { - URI uri = getClass().getClassLoader().getResource(filename + ".properties").toURI(); - // logger.info("DAIS0073 0.8.73 uri=" + uri.toString()); - file = new File(uri); - } - } - } catch (Exception e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0003: Cannot find configuration file '" + filename + "'", e); - } - check(); - setDaemon(true); - setName(monitorThreadName); - start(); - } - /** - * Check the config file to see if it has changed - */ - public void run() { - if (logger.isLoggable(Level.FINE)) logger.fine("Configuration::run()"); - while (!closed && !closeAll) { - try { - if (logger.isLoggable(Level.FINE)) logger.fine("sleeping " + Integer.toString(interval) + ", id=" + Long.toString(Thread.currentThread().getId()) + ", file=" + filename); - Thread.sleep(interval); - } catch (Exception e) { - } - if (logger.isLoggable(Level.FINE)) { - Thread currentThread = Thread.currentThread(); - logger.fine("checking id=" + Long.toString((currentThread != null) ? currentThread.getId() : -1) + ", file=" + filename); - } - check(); - } - } - - public static void wakeAllThreads() { - try { - Thread[] threads = ThreadUtils.getNamedThreads( monitorThreadName ); - for ( Thread thread : threads ) - thread.interrupt(); - } catch (Exception e) { - } - } - - public static void closeAllThreads() { - closeAll = true; - wakeAllThreads(); - } - - /** - * Forward this Configurable to the ConfigurationRegistry to be registered. - */ - public void registerConfigurable(Configurable element) { - configurationRegistry.registerConfigurable(element); - } - /** - * Forward this Configurable to the ConfigurationRegistry to be deRegistered. - */ - public void deRegisterConfigurable(Configurable element) { - configurationRegistry.deRegisterConfigurable(element); - } - - /** - * Get a configuration parameter as a String. - * If undefined, return null and log an error. - * @return String - */ - public String getString(String name) { - return getString(name, null, true); - } - /** - * Get a configuration parameter as a String. - * If undefined, return the specified default value. - * @return String - */ - public String getString(String name, String deflt) { - return getString(name, deflt, false); - } - - public static String trimQuotes(String str) { - if (str == null) return null; - str = str.trim(); - int len = str.length(); - if (len < 2) return str; - char startChar = str.charAt(0); - char endChar = str.charAt(len-1); - boolean startDoubleQuote = startChar == '"'; - boolean startSingleQuote = startChar == '\''; - boolean endDoubleQuote = endChar == '"'; - boolean endSingleQuote = endChar == '\''; - if ((startDoubleQuote && endDoubleQuote) || - (startSingleQuote && endSingleQuote)) { - return str.substring(1, len-1); - } else { - return str; - } - } - - /** - * Get a configuration parameter as a String. - * If undefined, return the specified default value. - * If complaining, log an error. - * @return String - */ - public String getString(String name, String deflt, boolean complain) { - checkinit(); - try { - return trimQuotes(config.getString(name)); - } catch (Exception e) { - if (subConfig != null) { - try { - return subConfig.getString(name, deflt, complain); - } catch (Exception e2) { - } - } - if (complain) - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0001: '" + filename + "': Configuration property " + name + " must be defined", e); - return deflt; - } - } - - /** - * Get a configuration parameter as a String encoded using URL % escapes. - * If undefined, return null and log an error. - * @return String - */ - public String getDecodedString(String name) { - return getDecodedString(name, null, true); - } - /** - * Get a configuration parameter as a String encoded using URL % escapes. - * If undefined, return the specified default value. - * @return String - */ - public String getDecodedString(String name, String deflt) { - return getDecodedString(name, deflt, false); - } - /** - * Get a configuration parameter as a String encoded using URL % escapes. - * If undefined, return the specified default value. - * If complaining, log an error. - * @return String - */ - public String getDecodedString(String name, String deflt, boolean complain) { - checkinit(); - try { - return URLDecoder.decode(config.getString(name), "UTF-8"); - } catch (UnsupportedEncodingException e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0007: UTF-8 is not recognized as a character set encoding", e); - return deflt; - } catch (Exception e) { - if (complain) - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0001: '" + filename + "': Configuration property " + name + " must be defined", e); - return deflt; - } - } - - /** - * Get a configuration parameter as a String[]. - * If undefined, return null and log an error. - * @return String[] - */ - public String[] getStrings(String name) { - return getStrings(name, null, "[ \t,]+", true); - } - /** - * Get a configuration parameter as a String[]. - * If undefined, return the specified default. - * @return String[] - */ - public String[] getStrings(String name, String[] deflt) { - return getStrings(name, deflt, "[ \t,]+", false); - } - /** - * Get a configuration parameter as a String[]. - * If undefined, return the specified default - * @return String[] - */ - public String[] getStrings(String name, String[] deflt, String pattern, boolean complain) { - name = getString(name, null, complain); - if (name == null) { - return deflt; - } - return name.trim().split(pattern); - } - - /** - * Get a configuration parameter as a String[], each String encoded using URL % escapes. - * If undefined, return null and log an error. - * @return String[] - */ - public String[] getDecodedStrings(String name) { - return getDecodedStrings(name, null, "[ \t,]+", true); - } - /** - * Get a configuration parameter as a String[], each String encoded using URL % escapes. - * If undefined, return the specified default. - * @return String[] - */ - public String[] getDecodedStrings(String name, String[] deflt) { - return getDecodedStrings(name, deflt, "[ \t,]+", false); - } - /** - * Get a configuration parameter as a String[], each String encoded using URL % escapes. - * If undefined, return the specified default. - * @return String[] - */ - public String[] getDecodedStrings(String name, String[] deflt, String pattern) { - return getDecodedStrings(name, deflt, pattern, false); - } - /** - * Get a configuration parameter as a String[], each String encoded using URL % escapes. - * If undefined, return the specified default. - * @return String[] - */ - public String[] getDecodedStrings(String name, String[] deflt, String pattern, boolean complain) { - name = getString(name, null, complain); - if (name == null) { - return deflt; - } - String[] strs = (name.trim().split(pattern)); - try { - for (int i = 0; i < strs.length; i++) { - strs[i] = URLDecoder.decode(strs[i], "UTF-8"); - } - } catch (UnsupportedEncodingException e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0007: UTF-8 is not recognized as a character set encoding", e); - } - return strs; - } - - /** - * Get a configuration parameter as a long. If undefined or non-numeric, return -1 and log an error. - */ - public long getLong(String name) { - return getLong(name, -1L); - } - /** - * Get a configuration parameter as a long. If undefined, return the specified default - * If non-numeric, return the specified default and log an error. - */ - public long getLong(String name, long deflt) { - String value = getString(name, null); - if (value == null) { - return deflt; - } - try { - return Long.parseLong(value.trim()); - } catch (Exception e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0002: '" + filename + "': Configuration property " + name + " must be numeric", e); - return deflt; - } - } - - /** - * Get a configuration parameter as an int. If undefined or non-numeric, return -1 and log an error. - */ - public int getInt(String name) { - return getInt(name, -1); - } - /** - * Get a configuration parameter as an int. If undefined, return the specified default - * If non-numeric, return the specified default and log an error. - */ - public int getInt(String name, int deflt) { - String value = getString(name, null); - if (value == null) { - return deflt; - } - try { - return Integer.parseInt(value.trim()); - } catch (Exception e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0002: '" + filename + "': Configuration property " + name + " must be numeric", e); - return deflt; - } - } - - /** - * Get a configuration parameter as an boolean. If undefined or non-numeric, return false and log an error. - */ - public boolean getBoolean(String name) { - return getBoolean(name, false); - } - /** - * Get a configuration parameter as an boolean. If undefined, return the specified default - * If non-numeric, return the specified default and log an error. - */ - public boolean getBoolean(String name, boolean deflt) { - String value = getString(name, null); - if (value == null) { - return deflt; - } - try { - return Boolean.parseBoolean(value.trim()); - } catch (Exception e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0002: '" + filename + "': Configuration property " + name + " must be true/false", e); - return deflt; - } - } - - /** - * Get a configuration parameter as a double. If undefined or non-numeric, return -1 and log an error. - */ - public double getDouble(String name) { - return getDouble(name, -1); - } - /** - * Get a configuration parameter as a double. If undefined, return the specified default - * If non-numeric, return the specified default and log an error. - */ - public double getDouble(String name, double deflt) { - String value = getString(name, null); - if (value == null) { - return deflt; - } - try { - return Double.parseDouble(value); - } catch (Exception e) { - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0002: '" + filename + "': Configuration property " + name + " must be numeric", e); - return deflt; - } - } - - public Enumeration getKeys() { - checkinit(); - return (config != null) ? config.getKeys() : null; - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/ConfigurationRegistry.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/ConfigurationRegistry.java deleted file mode 100644 index f108ced..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/ConfigurationRegistry.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.config; - -import java.util.logging.*; -import java.lang.ref.*; - -/** - * Class to register and notify other objects when needed. - * Those other objects must implement Configurable. - */ - -public class ConfigurationRegistry { - public ConfigurationRegistry() { } - - /** - * The set of registered configurables - */ - private WeakReference<Configurable>[] configurables = new WeakReference[0]; - - /** - * Request callback whenever the configuration data changes - */ - public synchronized void registerConfigurable(Configurable element) { - // System.out.println("adding " + element.getClass().getName() + ", length=" + Integer.toString(configurables.length)); - for (int i = 0; i < configurables.length; i++) { - if (configurables[i].get() == element) { - return; - } - } - WeakReference<Configurable>[] nconfigurables = new WeakReference[configurables.length + 1]; - System.arraycopy(configurables, 0, nconfigurables, 0, configurables.length); - nconfigurables[configurables.length] = new WeakReference<Configurable>(element); - configurables = nconfigurables; - element.reConfigure(); - } - - /** - * Cancel request for callbacks when configuration changes - */ - public synchronized void deRegisterConfigurable(Configurable element) { - // System.out.println("removing " + element.getClass().getName() + ", length=" + Integer.toString(configurables.length)); - for (int i = 0; i < configurables.length; i++) { - if (configurables[i].get() == element) { - WeakReference<Configurable>[] nconfigurables = new WeakReference[configurables.length - 1]; - if (i > 0) { - System.arraycopy(configurables, 0, nconfigurables, 0, i); - } - if (i < nconfigurables.length) { - System.arraycopy(configurables, i + 1, nconfigurables, i, nconfigurables.length - i); - } - configurables = nconfigurables; - return; - } - } - } - - /** - * Notify all of the Configurables that they need to reConfigure. - */ - public void reConfigureAll() { - reConfigureAll(Logger.getLogger(ConfigurationRegistry.class.getName())); - } - - /** - * Notify all of the Configurables that they need to reConfigure. - */ - public void reConfigureAll(Logger logger) { - // System.out.println("reConfigureAll(), length=" + Integer.toString(configurables.length)); - for (int i = 0; i < configurables.length; i++) { - try { - // System.out.println("reConfigureAll(), i=" + Integer.toString(i)); - WeakReference<Configurable> wc = configurables[i]; - Configurable c = (wc != null) ? wc.get() : null; - if (c != null) - c.reConfigure(); - } catch (Exception e) { - WeakReference<Configurable> wc = configurables[i]; - Configurable c = (wc != null) ? wc.get() : null; - logger.log(Level.SEVERE, "DAIS0048 Unrecoverable configuration error CNFG0005: Problem while invoking reConfigure for: " + - ((wc == null) ? "null" : (c == null) ? "null/null" : c.getClass().getName()) + ": " + - e.getMessage(), e); - } - } - } - - /** - * Return the number of configurables that are registered. - */ - public int getCount() { - return configurables.length; - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/EncryptedConfiguration.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/EncryptedConfiguration.java deleted file mode 100644 index 3da0f42..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/EncryptedConfiguration.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.config; - -import java.util.logging.*; -// import java.lang.ref.*; -import org.onap.dcae.cdf.util.common.*; -import gnu.getopt.Getopt; -import java.security.*; -import javax.crypto.*; -import javax.crypto.spec.SecretKeySpec; - -/** - * Class to manage encrypted configuration values. - */ - -public class EncryptedConfiguration { - /** - * Our secret key - */ - private String encryptionKey; - - /** - * Where to log when things go wrong - */ - private Logger logger; - - public EncryptedConfiguration(String key, Logger logger) { - encryptionKey = key.trim(); - this.logger = logger; - } - - /** - * Retrieve an encrypted string from the given configuration. - * The name will have ".x" appended to it. - * Decoded from hex, it will be "method:hexsalt:hexvalue". - * The format of the value will be in hex. - * Method will be "r" to begin with, for "rc4". - */ - public String getString(Configuration config, String name, String deflt, boolean complain) throws Exception { - return getString(config, name, deflt, complain, encryptionKey); - } - - /** - * Retrieve an encrypted string from the given configuration. - * The name will have ".x" appended to it. - * Decoded from hex, it will be "method:hexsalt:hexvalue". - * The format of the value will be in hex. - * Method will be "r" to begin with, for "rc4". - */ - public String getString(Configuration config, String name, String deflt, boolean complain, String key) throws Exception { - String str = config.getString(name + ".x", null, complain); - if (str == null) { - return deflt; - } - return decrypt(str, key); - } - - /** - * Decrypt a string in 'method:hexsalt:hexvalue' format. - */ - public static String decrypt(String triple, String key) throws Exception { - String[] strParts = triple.trim().split(":"); - if (strParts.length != 3) throw new Exception("Encrypted value must look like 'x:y:z'"); - return decrypt(strParts[0], Convert.stringFromHex(strParts[1]), key, Convert.bytesFromHex(strParts[2])); - } - - /** - * Decrypt a string 'method:hexsalt:hexvalue' format. - */ - public static String decrypt(String method, String salt, String key, byte[] bvalue) throws Exception { - /* if (false) { - System.out.println("method length=" + method.length()); System.out.println(AsHex.asHex(method)); - System.out.println("salt length=" + salt.length()); System.out.println(AsHex.asHex(salt)); - System.out.println("key length=" + key.length()); System.out.println(AsHex.asHex(key)); - System.out.println("bvalue length=" + bvalue.length); System.out.println(AsHex.asHex(bvalue)); - } */ - byte[] secretKey = runDigest(salt + "." + key); - - SecretKeySpec skeySpec = new SecretKeySpec(secretKey, method); - - Cipher cipher = Cipher.getInstance(method); // "AES" - cipher.init(Cipher.DECRYPT_MODE, skeySpec); - - byte[] decrypted = cipher.doFinal(bvalue); - return new String(decrypted); - } - - /** - * Encrypt a string using the given method, salt and key. - */ - public static byte[] encrypt(String method, String salt, String key, String value) throws Exception { - byte[] bvalue = value.getBytes(); - byte[] secretKey = runDigest(salt + "." + key); - - SecretKeySpec skeySpec = new SecretKeySpec(secretKey, method); - - Cipher cipher = Cipher.getInstance(method); // "AES" - cipher.init(Cipher.ENCRYPT_MODE, skeySpec); - - byte[] encrypted = cipher.doFinal(bvalue); - return encrypted; - } - - /** - * Prepare a secret key by running a digest on it. - */ - private static byte[] runDigest(String text) throws Exception { - MessageDigest md = MessageDigest.getInstance("MD5"); - md.reset(); - md.update(text.getBytes(), 0, text.length()); - return md.digest(); - } - - /** - * Encrypt a string using the given method, salt and key, and return it as a hex-formated triple. - */ - public static String encryptToTriple(String method, String salt, String key, String value) throws Exception { - StringBuilder sb = new StringBuilder(method); - sb.append(':').append(Convert.toHexString(salt)) - .append(':').append(Convert.toHexString(encrypt(method, salt, key, value))); - return sb.toString(); - } - - /** - * Create a value that can be used as a salt. - */ - public static String generateSalt() { - return Long.toString(System.currentTimeMillis() % 1000) + Pid.getPidStr(); - } - - public static void usage() { - usage(null); - } - - public static void usage(String msg) { - if (msg != null) System.out.println(msg); - System.out.println("Usage: java EncryptedConfiguration -D triple -k key\n" + - "java EncryptedConfiguration -d string -m method [-s salt | -S] -k key\n" + - "java EncryptedConfiguration -e string -m method [-s salt | -S] -k key\n" + - "-D\tdecrypt x:y:z triple\n" + - "-d\tdecrypt string (in hex)\n" + - "-e\tencrypt string\n" + - "-S\tgenerate a salt\n" - ); - System.exit(1); - } - - public static void main(String args[]) throws Exception { - Getopt g = new Getopt( "EncryptedConfiguration", args, "s:Sk:m:e:d:D:?" ); - - int c, verbosity = 0; - String salt = null, key = null, method = null, encStr = null, decStr = null, triple = null; - boolean genSalt = false; - - while ((c = g.getopt()) != -1) { - switch (c) { - case 's': salt = g.getOptarg(); break; - case 'S': genSalt = true; break; - case 'k': key = g.getOptarg(); break; - case 'm': method = g.getOptarg(); break; - case 'e': encStr = g.getOptarg(); break; - case 'd': decStr = g.getOptarg(); break; - case 'D': triple = g.getOptarg(); break; - case '?': usage(); break; - } - } - - if (triple == null) { - if ((salt == null) && !genSalt) usage("one of -s or -S must be specified"); - if ((salt != null) && genSalt) usage("only one of -s or -S must be specified"); - if (key == null) usage("-k must be specified"); - if (method == null) usage("-m must be specified"); - if ((encStr == null) && (decStr == null)) usage("one of -d or -e must be specified"); - if ((encStr != null) && (decStr != null)) usage("only one of -d or -e may be specified"); - if (genSalt) salt = generateSalt(); - if (encStr != null) - System.out.println(encryptToTriple(method, salt, key, encStr)); - if (decStr != null) - System.out.println(decrypt(method, salt, key, Convert.bytesFromHex(decStr))); - } else { - if (key == null) usage("-k not specified"); - System.out.println(decrypt(triple, key)); - } - - // http://forums.sun.com/thread.jspa?threadID=5290983 - // try { - // String message = "Strong Versus Unlimited Strength Cryptography"; - // SecretKeySpec skeySpec = new SecretKeySpec("0123456789ABCDEF".getBytes(), "AES"); //AES-128 - - // Cipher cipher = Cipher.getInstance("AES"); // "AES/ECB/NoPadding" - // cipher.init(Cipher.ENCRYPT_MODE, skeySpec); - - // byte[] encrypted = cipher.doFinal(message.getBytes()); - // System.out.println("encrypted string: " + encrypted); //storing into MySQL DB - // System.out.println("in hex: '" + Convert.toHexString(encrypted) + "'"); - - // cipher.init(Cipher.DECRYPT_MODE, skeySpec); - // byte[] original = cipher.doFinal(encrypted); - // String originalString = new String(original); - // System.out.println("Original string: " + originalString); - // } catch (Exception e) { - // System.err.println("Exception caught: " + e.toString()); - // } - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java deleted file mode 100644 index efeabc5..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/config/PropValue.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.config; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.BufferedReader; -import java.io.PrintStream; -import java.io.IOException; -import java.util.logging.Logger; -import org.onap.dcae.cdf.util.config.Configuration; -import org.onap.dcae.cdf.util.config.EncryptedConfiguration; -import gnu.getopt.Getopt; - -public class PropValue { - private EncryptedConfiguration encryptedConfiguration; - private String encryptionKey; - - public PropValue(Configuration globalConfig, Logger logger) { - encryptionKey = globalConfig.getString(getEncryptionKeyProperty()); - encryptedConfiguration = new EncryptedConfiguration(encryptionKey, logger); - } - - public String getEncryptedString(Configuration config, String name, String deflt, boolean complain) throws Exception { - return encryptedConfiguration.getString(config, name, deflt, complain); - } - - public String generateEncryptedProperty(String method, String salt, String value) throws Exception { - return generateEncryptedProperty(method, salt, value, this); - } - - public String decryptTriple(String triple) { - return decryptTriple(triple, this); - } - - public static void printEncryptedProperty(String method, String name, String salt, String value, String globalPropFile) { - try { - if (name != null) System.out.print(name + ".x="); - if (globalPropFile == null) globalPropFile = getGlobalPropFile(); - if (globalPropFile == null) throw new NullPointerException("globalPropFile not set"); - System.out.println(generateEncryptedProperty(method, salt, value, globalPropFile)); - } catch (Exception e) { - System.err.println("Cannot encrypt '" + value + "', method '" + method + "' for property '" + name + "': "+ e.toString()); - } - } - - public static String generateEncryptedProperty(String method, String salt, String value, String globalPropFile) throws Exception { - Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); - if (globalPropFile == null) globalPropFile = getGlobalPropFile(); - if (globalPropFile == null) throw new NullPointerException("globalPropFile not set"); - PropValue propValue = new PropValue(new Configuration(globalPropFile), logger); - return generateEncryptedProperty(method, salt, value, propValue); - } - - public static String generateEncryptedProperty(String method, String salt, String value, PropValue propValue) throws Exception { - if (salt == null) salt = EncryptedConfiguration.generateSalt(); - return EncryptedConfiguration.encryptToTriple(method, salt, propValue.encryptionKey, value); - } - - public static void extractProperty(String f, String name, boolean encrypted) { - extractProperty(f, name, encrypted, null); - } - - public static void extractProperty(String f, String name, boolean encrypted, String globalPropFile) { - Configuration config = new Configuration(f); - Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); - if (globalPropFile == null) globalPropFile = getGlobalPropFile(); - if (globalPropFile == null) throw new NullPointerException("globalPropFile not set"); - PropValue propValue = new PropValue(new Configuration(globalPropFile), logger); - String val = ""; - try { - if (encrypted) - val = propValue.getEncryptedString(config, name, "", true); - else - val = config.getString(name); - System.out.println(val); - } catch (Exception e) { - System.err.println("Cannot extract '" + name + "' from '" + config + "': " + e.toString()); - } - } - - public static void usage() { - usage(null); - } - - // public static String decryptTriple(String triple) { - // return decryptTriple(triple, null); - // } - - public static String decryptTriple(String triple, String globalPropFile) { - Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); - if (globalPropFile == null) globalPropFile = getGlobalPropFile(); - if (globalPropFile == null) throw new NullPointerException("globalPropFile not set"); - PropValue propValue = new PropValue(new Configuration(globalPropFile), logger); - return decryptTriple(triple, propValue); - } - - public static String decryptTriple(String triple, PropValue propValue) { - String ret = null; - try { - ret = EncryptedConfiguration.decrypt(triple, propValue.encryptionKey); - } catch (Exception e) { - System.err.println("Cannot decrypt '" + triple + "': " + e.toString()); - } - return ret; - } - - public static void encryptInput(InputStream in, PrintStream out) throws Exception { - encryptInput(null, in, out); - } - public static void encryptInput() throws Exception { - encryptInput(null, System.in, System.out); - } - - private static void printEncryptedValue(Matcher m, PropValue propValue, PrintStream sysout) { - String method = m.group(1); - String name = m.group(2); - String value = m.group(3); - try { - sysout.println(name + ".x=" + - EncryptedConfiguration.encryptToTriple(method, - EncryptedConfiguration.generateSalt(), - propValue.encryptionKey, value)); - } catch (Exception e) { - System.err.println("Error: Cannot encrypt '" + value + "', method '" + method + "' for property '" + name + "': " + e.toString()); - } - } - - public static void encryptInput(String globalPropFile, InputStream sysin, PrintStream sysout) throws Exception { - String s; - - Pattern pDquote = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*=[ \t]*\"([^\"]*)\"[ \t]*$"); - Pattern pSquote = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*=[ \t]*'([^']*)'[ \t]*$"); - Pattern pNoWhite = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*=[ \t]*([^ \t'\"]+)[ \t]*$"); -// Pattern pEncryptMe = Pattern.compile("^ENCRYPTME[.]([A-Z]*)[.]([^= \t]*)[ \t]*="); - - Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); - if (globalPropFile == null) globalPropFile = getGlobalPropFile(); - if (globalPropFile == null) throw new NullPointerException("globalPropFile not set"); - PropValue propValue = new PropValue(new Configuration(globalPropFile), logger); - - BufferedReader in = new BufferedReader(new InputStreamReader(sysin)); - - try { - while ((s = in.readLine()) != null) { - // System.out.println("looking at '" + s + "'"); - Matcher mDquote = pDquote.matcher(s); - Matcher mSquote = pSquote.matcher(s); - Matcher mNoWhite = pNoWhite.matcher(s); -// Matcher mEncryptMe = pNoWhite.matcher(s); - if (mDquote.matches()) { - printEncryptedValue(mDquote, propValue, sysout); - } else if (mSquote.matches()) { - printEncryptedValue(mSquote, propValue, sysout); - } else if (mNoWhite.matches()) { - printEncryptedValue(mNoWhite, propValue, sysout); - } else if (s.startsWith("ENCRYPTME")) { - throw new Exception("Bad value to encrypt: '" + s + "'"); - } else { - // System.out.println("printing the line: '" + s + "'"); - sysout.println(s); - } - } - } catch (IOException e) { - System.err.println("Error: Cannot read from stdin: " + e.toString()); - } catch (Exception e) { - throw e; - } - } - - public static void usage(String msg) { - if (msg != null) System.err.println(msg); - System.err.println("Usage: java PropValue [-x] -n property -f property-file"); - System.err.println("\tExtract the named value from the given property-file (or full pathname)"); - System.err.println("Usage: java PropValue -e method [-n property] [-s salt] -v value"); - System.err.println("\tEncrypt the given property with the given name and value"); - System.err.println("Usage: java PropValue -E"); - System.err.println("\tEncrypt all lines that look like ENCRYPTME.METHOD.name=value"); - System.err.println("Usage: java PropValue -u value"); - System.err.println("\tDecrypt the given value, expressed as a triple METHOD:HEXSALT:HEXVAL"); - System.exit(1); - } - - public static void setGlobalPropFile(String g) { sGlobalPropFile = g; } - public static String getGlobalPropFile() { return sGlobalPropFile; } - private static String sGlobalPropFile = null; - - public static void setEncryptionKeyProperty(String e) { encryptionKeyProperty = e; } - public static String getEncryptionKeyProperty() { return encryptionKeyProperty; } - private static String encryptionKeyProperty = "Global_Title"; - - public static void main(String args[]) throws Exception { - Getopt g = new Getopt( "PropValue", args, "e:Ef:G:n:s:u:v:x" ); - String propfile = null, name = null, method = null, value = null, unencrypt = null; - String globalPropFile = getGlobalPropFile(); - boolean useDecryption = false, encryptStdin = false; - String salt = null; - int c; - - while ((c = g.getopt()) != -1) { - switch (c) { - case 'e': method = g.getOptarg(); break; - case 'E': encryptStdin = true; break; - case 'f': propfile = g.getOptarg(); break; - case 'G': globalPropFile = g.getOptarg(); break; - case 'n': name = g.getOptarg(); break; - case 's': salt = g.getOptarg(); break; - case 'u': unencrypt = g.getOptarg(); break; - case 'v': value = g.getOptarg(); break; - case 'x': useDecryption = true; break; - case '?': usage(); break; - } - } - if (encryptStdin) { - if (name != null || propfile != null || method != null || value != null) usage("cannot use -E with other options"); - encryptInput(System.in, System.out); - } else if (unencrypt == null) { - if (method != null) { - if (value == null) usage("-v required"); - printEncryptedProperty(method, name, salt, value, globalPropFile); - } else { - if (name == null) usage("-n is required"); - if (propfile == null) usage("-f is required"); - extractProperty(propfile, name, useDecryption, globalPropFile); - } - } else { - System.out.println(decryptTriple(unencrypt, globalPropFile)); - } - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/.gitignore b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/.gitignore deleted file mode 100644 index 6b468b6..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.class diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/TaskThread.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/TaskThread.java deleted file mode 100644 index 97d1520..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/TaskThread.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.threads; - -/** - * A thread with a queue of runnable tasks to execute in the - * thread - */ -public class TaskThread extends Thread { - /** - * Allocates a new TaskThread object. - */ - public TaskThread() { - } - /** - * Allocates a new TaskThread object. - */ - public TaskThread(Runnable target) { - super(target); - } - /** - * Allocates a new TaskThread object. - */ - public TaskThread(ThreadGroup group, Runnable target) { - super(group, target); - } - /** - * Allocates a new TaskThread object. - */ - public TaskThread(String name) { - super(name); - } - /** - * Allocates a new TaskThread object. - */ - public TaskThread(ThreadGroup group, String name) { - super(group, name); - } - /** - * Allocates a new TaskThread object. - */ - public TaskThread(Runnable target, String name) { - super(target, name); - } - /** - * Allocates a new TaskThread object. - */ - public TaskThread(ThreadGroup group, Runnable target, String name) { - super(group, target, name); - } - /** - * A queued request to be run in the TaskThread - */ - private static class Task { - public Task next; - public Runnable target; - public Task(Runnable target) { - this.target = target; - } - } - private Task head; - private Task tail; - protected boolean closed; - /** - * Queue up a task to be executed by this thread. - */ - protected synchronized void queueRequest(Runnable r) { - Task t = new Task(r); - if (head == null) { - head = t; - wakeup(); - } else { - tail.next = t; - } - tail = t; - } - /** - * Mark as closed and wake up. - */ - protected synchronized void markClosed() { - if (!closed) { - closed = true; - wakeup(); - } - } - /** - * Wait for the next queued request. If closed, return - * null. Relies on the default implementation of wakeup. - */ - protected synchronized Runnable waitNextRequest() { - Task t; - while ((t = head) == null && !closed) { - try { - wait(); - } catch (Exception e) { - } - } - head = t.next; - if (head == null) { - tail = null; - } - return t.target; - } - /** - * Get the next queued request or null if none - */ - protected synchronized Runnable nextRequest() { - Task t = head; - if (t == null) { - return null; - } - head = t.next; - if (head == null) { - tail = null; - } - return t.target; - } - /** - * Wake up the thread to process tasks. - * Implementation depends on what the thread - * is waiting on. The default implementation - * does a this.notify(). - */ - protected void wakeup() { - notify(); - } - /** - * Process any pending requests then return - */ - protected void processQueuedRequests() { - Runnable r; - while ((r = nextRequest()) != null) { - r.run(); - } - } - /** - * Check whether any tasks are pending - */ - protected boolean areTasksPending() { - return (head != null); - } - /** - * Wait for and process pending requests until closed - */ - protected void processRequestsForever() { - Runnable r; - while ((r = waitNextRequest()) != null) { - r.run(); - } - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/ThreadUtils.java b/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/ThreadUtils.java deleted file mode 100644 index 34afebe..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/main/java/org/onap/dcae/cdf/util/threads/ThreadUtils.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util.threads; - -import java.util.LinkedList; -import java.util.List; - -/** - * Various utility functions dealing with threads - */ -public class ThreadUtils { - /** - * Get a list of all threads. - * - * @return an array of threads - */ - public static Thread[] getAllThreads() { - ThreadGroup rootGroup = getRootGroup(); - int noThreads = rootGroup.activeCount(); // returns an estimated count of active threads - Thread[] threads = new Thread[noThreads + 1]; - rootGroup.enumerate(threads); - - while ( rootGroup.enumerate( threads, true ) == threads.length ) { // iterate if we filled up the array - threads = new Thread[ threads.length + noThreads ]; - } - // remove null threads - LinkedList<Thread> lthreads = new LinkedList<Thread>(); - for (Thread thread: threads) - if (thread != null) - lthreads.push(thread); - return lthreads.toArray(new Thread[0]); - } - - /** - * Get a list of all threads with a given thread name. - * - * @param name the name to look for - * @return an array of threads with that name - */ - public static Thread[] getNamedThreads(final String name) { - Thread[] allThreads = getAllThreads(); - LinkedList<Thread> lthreads = new LinkedList<Thread>(); - for (Thread thread: allThreads) - if (thread.getName().equals(name)) - lthreads.push(thread); - - return lthreads.toArray(new Thread[0]); - } - - /** - * Get the ultimate root of the threads - * - * @return the root thread - */ - public static ThreadGroup getRootGroup() { - ThreadGroup rootGroup = Thread.currentThread( ).getThreadGroup( ); - ThreadGroup parentGroup; - while ( ( parentGroup = rootGroup.getParent() ) != null ) { - rootGroup = parentGroup; - } - return rootGroup; - } - - public static void main(String args[]) throws Exception { - System.out.println("==== get Root Threads ===="); - System.out.println("Root thread = " + getRootGroup().getName()); - System.out.println("==== get All Threads ===="); - Thread[] threads = getAllThreads(); - for (int i = 0; i < threads.length; i++) - System.out.println("Thread No:" + i + " = " + threads[i].getName()); - System.out.println("==== getNamedThreads(main) ===="); - threads = getNamedThreads("main"); - for (int i = 0; i < threads.length; i++) - System.out.println("Thread No:" + i + " = " + threads[i].getName()); - } -} diff --git a/cdf/src/cdf-prop-value/cdf-util/src/test/java/org/onap/dcae/cdf/util/AppTest.java b/cdf/src/cdf-prop-value/cdf-util/src/test/java/org/onap/dcae/cdf/util/AppTest.java deleted file mode 100644 index 60467c9..0000000 --- a/cdf/src/cdf-prop-value/cdf-util/src/test/java/org/onap/dcae/cdf/util/AppTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -package org.onap.dcae.cdf.util; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/cdf/src/cdf-prop-value/makefile b/cdf/src/cdf-prop-value/makefile deleted file mode 100644 index 194ad29..0000000 --- a/cdf/src/cdf-prop-value/makefile +++ /dev/null @@ -1,13 +0,0 @@ -all: - -build: - cd cdf-util/src/main/java && $(MAKE) build - cd cdf-prop-value/src/main/java && $(MAKE) build - -javadocs: - cd cdf-util/src/main/java && $(MAKE) javadocs - cd cdf-prop-value/src/main/java && $(MAKE) javadocs - -clean: - cd cdf-util/src/main/java && $(MAKE) clean - cd cdf-prop-value/src/main/java && $(MAKE) clean diff --git a/cdf/src/common/postinst b/cdf/src/common/postinst deleted file mode 100755 index 875b535..0000000 --- a/cdf/src/common/postinst +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -exec 1> /tmp/cdf.out 2>&1 -set -x -if [ -d /opt/app/postgresql-9.5.2 ] -then export ONAP=false NOTONAP=true -else export ONAP=true NOTONAP=false -fi - -echo STARTING $0 $(date) -umask 0 -echo STARTING $0 $(date) >> /tmp/pgaas.inst.report - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -id -umask 022 - -# randomize the the CDF package -ranval=$(dd if=/dev/urandom count=1 ibs=8 2>/dev/null | od -x -w1000 | sed -e 's/^0000000 //' -e 's/ //g' -e 1q) -CDFCFG=${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg -rm -f ${CDFCFG} -sed -e 's/${HOSTNAME}/'"$(hostname -f)"'/' -e 's/${RANDOM}/'"$ranval"'0/' < ${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg.tmpl > ${CDFCFG} -chown postgres:postgres ${CDFCFG} - -echo ENDING $0 $(date) -echo ENDING $0 $(date) >> /tmp/pgaas.inst.report -if $NOTONAP -then sed -n '/^STARTING/,/^ENDING/p' `dirname $0`/../../proc_out >> /tmp/pgaas.inst.report -fi diff --git a/cdf/src/makefile b/cdf/src/makefile deleted file mode 100644 index faa08b9..0000000 --- a/cdf/src/makefile +++ /dev/null @@ -1,53 +0,0 @@ - -DEVBIN=../../bin -PKG=cdf -REPACKAGEDEBIANOPTS= - -INS= ../install -INSSTG= $(INS)/stage -INSCOM= $(INS)/common -KEEP= - -all: - -clean-stage: - rm -rf $(INSSTG) - -clean-common: - rm -rf $(INSCOM) - -clean-ins: clean-stage clean-common - rm -rf $(INS) - -clean: clean-ins - rm -rf *~ - cd cdf-prop-value && $(MAKE) clean - -build: javadocs build-java - -build-java: - cd cdf-prop-value && $(MAKE) build - -javadocs: - cd cdf-prop-value && $(MAKE) javadocs - -stage: build clean-stage clean-common - mkdir -p $(INS) - find stage common ! -name makefile ! -name '*~' | cpio -pudmv $(INS) - cp -p cdf-prop-value/cdf-prop-value/src/main/java/cdf-prop-value.jar $(INS)/stage/opt/app/cdf/lib/cdf-prop-value-1.1.0.jar - cp -p cdf-prop-value/cdf-prop-value/src/main/java/cdf-prop-value.jar $(INS)/stage/opt/app/cdf/lib/cdf-prop-value.jar - cp -p cdf-prop-value/cdf-util/src/main/java/cdf-util.jar $(INS)/stage/opt/app/cdf/lib/jars/cdf-util-1.1.0.jar - cp -p cdf-prop-value/cdf-util/src/main/java/cdf-util.jar $(INS)/stage/opt/app/cdf/lib/jars/cdf-util.jar - chmod a+x $(INSCOM)/* - - -debian: stage - sed 's/$${RELLONG}/'"$$MVN_VERSION_ONLY/" < repackage.json > $(INS)/repackage.json - repackage -b debian $(REPACKAGEDEBIANOPTS) -d $(INS) -u -X "{appname}.{suffix},{appname}.{suffix}-{version}$$SNAPSHOT,{appname}.{suffix}-{version}$$SNAPSHOT-{datetime}" -y $(INS)/repackage.json - @echo debian built - -upload-javadocs: javadocs - cd cdf-prop-value && find cdf-*/src/main/java/javadoc -type f | while read f; do \ - curl -k --user "$${ONAP_NEXUS_USER}:$${ONAP_NEXUS_PASSWORD}" --upload-file "$$f" "$${ONAP_NEXUS_JAVADOC}/org.onap.dcae.storage.cdf/1.1.0/$$f"; \ - done - diff --git a/cdf/src/repackage.json b/cdf/src/repackage.json deleted file mode 100644 index ce7a546..0000000 --- a/cdf/src/repackage.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "applicationName": "cdf", - "debian": { - "conflicts": [], - "externalDependencies": [ - { - "libgetopt-java": ">= 1.0.14" - } - ], - "groupId": "org.onap.dcae.storage.pgaas", - "replaces": [] - }, - "description": " PostgreSQL as a Service main scripts ", - "directoryTreeTops": { - "/opt": "/opt/app/cdf" - }, - "docker": { - "externalDependencies": [], - "tag": "latest" - }, - "executionGroup": "postgres", - "executionUser": "postgres", - "fileGroup": "postgres", - "fileUser": "postgres", - "groupId": "org.onap.dcae.storage.pgaas", - "internalDependencies": [], - "maintainer": "ONAP <dcae@lists.onap.org>", - "version": "${RELLONG}" -}
\ No newline at end of file diff --git a/cdf/src/stage/opt/app/cdf/bin/getpropvalue b/cdf/src/stage/opt/app/cdf/bin/getpropvalue deleted file mode 100755 index 78a74b2..0000000 --- a/cdf/src/stage/opt/app/cdf/bin/getpropvalue +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -P=/opt/cdf -CDF=/opt/app/cdf - -export PATH=/opt/java/jdk/jdk170/bin:$PATH -export CLASSPATH=$CDF/lib/cdf-prop-value.jar:$CDF/lib/jars/cdf-util.jar -if [ -f $CDF/lib/jars/gnu_getopt.jar ] -then CLASSPATH=$CLASSPATH:$CDF/lib/jars/gnu_getopt.jar ] -elif [ -f /usr/share/java/gnu-getopt.jar ] -then CLASSPATH=$CLASSPATH:/usr/share/java/gnu-getopt.jar -else echo "$0: Cannot find gnu-getopt.jar" 1>&2; exit 1 -fi - -PropValue=org.onap.dcae.cdf.CdfPropValue -CfgFile=$CDF/lib/cdf.cfg - -java $PropValue -f $CfgFile "$@" diff --git a/cdf/src/stage/opt/app/cdf/bin/setencryptedvalues b/cdf/src/stage/opt/app/cdf/bin/setencryptedvalues deleted file mode 100755 index c60fbad..0000000 --- a/cdf/src/stage/opt/app/cdf/bin/setencryptedvalues +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -P=/opt/cdf -CDF=/opt/app/cdf - -export PATH=/opt/java/jdk/jdk170/bin:$PATH -export CLASSPATH=$CDF/lib/cdf-prop-value.jar:$CDF/lib/jars/cdf-util.jar -if [ -f $CDF/lib/jars/gnu_getopt.jar ] -then CLASSPATH=$CLASSPATH:$CDF/lib/jars/gnu_getopt.jar ] -elif [ -f /usr/share/java/gnu-getopt.jar ] -then CLASSPATH=$CLASSPATH:/usr/share/java/gnu-getopt.jar -else echo "$0: Cannot find gnu-getopt.jar" 1>&2; exit 1 -fi - -PropValue=org.onap.dcae.cdf.CdfPropValue - -java $PropValue -E "$@" diff --git a/cdf/src/stage/opt/app/cdf/lib/cdf.cfg.tmpl b/cdf/src/stage/opt/app/cdf/lib/cdf.cfg.tmpl deleted file mode 100644 index 7292963..0000000 --- a/cdf/src/stage/opt/app/cdf/lib/cdf.cfg.tmpl +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -#### -#### nothing should need to change below -#### -Global_Title="This is the Common DCAE Framework 1.0 ${HOSTNAME} ${RANDOM}" diff --git a/cdf/src/stage/opt/app/cdf/lib/jars/which_files b/cdf/src/stage/opt/app/cdf/lib/jars/which_files deleted file mode 100644 index 47a7ba7..0000000 --- a/cdf/src/stage/opt/app/cdf/lib/jars/which_files +++ /dev/null @@ -1,3 +0,0 @@ -The following files were installed here: - -gnu_getopt.jar @@ -1,7 +1,7 @@ all: -STAGEDIRS=cdf pgaas +STAGEDIRS= build: @echo "================ make build ================" @@ -46,6 +46,9 @@ install: deploy: @echo "================ make deploy ================" + +olddeploy: + @echo "================ make deploy ================" rm -f $$HOME/.netrc ; \ REPO=$$MVN_NEXUSPROXY/content/sites/raw/$$MVN_PROJECT_GROUPID ; \ hostport=$$(echo $$REPO | cut -f3 -d /) ; \ diff --git a/pgaas/src/common/postinst b/pgaas/src/common/postinst deleted file mode 100755 index f98f6f6..0000000 --- a/pgaas/src/common/postinst +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -exec 1> /tmp/pgaas.out 2>&1 -set -x -if [ -d /opt/app/postgresql-9.5.2 ] -then export ONAP=false NOTONAP=true -else export ONAP=true NOTONAP=false -fi -id - -if $ONAP -then INSTALL_ROOT= -fi - -echo STARTING $0 $(date) -umask 0 -echo STARTING $0 $(date) >> /tmp/pgaas.inst.report - -export CFGDIR=${INSTALL_ROOT}/opt/app/pgaas - -ret=0 - -if $CFGDIR/etc/do-post-install-prep -then - if su postgres -c $CFGDIR/etc/do-post-install-config - then - if su postgres -c $CFGDIR/etc/do-post-install-tools - then - if $CFGDIR/etc/do-post-install-post - then : - else echo do-post-install-post failed; ret=1 - fi - else echo do-post-install-tools failed; ret=1 - fi - else echo do-post-install-config failed; ret=1 - fi -else echo do-post-install-prep failed; ret=1 -fi - -echo ENDING $0 $(date) -echo ENDING $0 $(date) >> /tmp/pgaas.inst.report -if $NOTONAP -then sed -n '/^STARTING/,/^ENDING/p' `dirname $0`/../../proc_out >> /tmp/pgaas.inst.report -fi -exit $ret diff --git a/pgaas/src/makefile b/pgaas/src/makefile deleted file mode 100644 index 56d7ed7..0000000 --- a/pgaas/src/makefile +++ /dev/null @@ -1,47 +0,0 @@ - -DEVBIN=../../bin -PKG=pgaas -REPACKAGEDEBIANOPTS= - -INS= ../install -INSSTG= $(INS)/stage -INSCOM= $(INS)/common -KEEP= - -all: - -clean-stage: - rm -rf $(INSSTG) - -clean-common: - rm -rf $(INSCOM) - -clean-ins: clean-stage clean-common - rm -rf $(INS) - -clean-testlock: - cd testlock && $(MAKE) clobber - -clean: clean-ins clean-testlock - rm -rf *~ nohup.out - -testlock/testlock: - cd testlock && $(MAKE) testlock - -build: testlock/testlock - -stage: build clean-stage clean-common - mkdir -p $(INS) - cd stage/opt/app/pgaas && $(MAKE) stage STAGEDIR=../../../../$(INSSTG) - cd testlock && $(MAKE) stage STAGEDIR=../$(INSSTG) DISTPATH=opt/app/pgaas - find common ! -name makefile ! -name '*~' | cpio -pudmv $(INS) - - -debian: stage - sed 's/$${RELLONG}/'"$$MVN_VERSION_ONLY/" < repackage.json > $(INS)/repackage.json - repackage -b debian $(REPACKAGEDEBIANOPTS) -d $(INS) -u -X "{appname}.{suffix},{appname}.{suffix}-{version},{appname}.{suffix}-{version}-{datetime}" -y $(INS)/repackage.json - @echo debian built - -upload-javadocs: - @echo nothing to do here - diff --git a/pgaas/src/repackage.json b/pgaas/src/repackage.json deleted file mode 100644 index 365769b..0000000 --- a/pgaas/src/repackage.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "applicationName": "pgaas", - "debian": { - "conflicts": [], - "externalDependencies": [ - { - "cdf": ">= ${RELLONG}" - }, - { - "postgresql": ">= 9.5" - } - ], - "groupId": "org.onap.dcae.storage.pgaas", - "replaces": [] - }, - "description": " PostgreSQL as a Service main scripts ", - "directoryTreeTops": { - "/opt": "/opt/app/pgaas" - }, - "docker": { - "externalDependencies": [], - "tag": "latest" - }, - "executionGroup": "root", - "executionUser": "root", - "fileGroup": "postgres", - "fileUser": "postgres", - "groupId": "org.onap.dcae.storage.pgaas", - "internalDependencies": [], - "maintainer": "ONAP <dcae@lists.onap.org>", - "version": "${RELLONG}" -}
\ No newline at end of file diff --git a/pgaas/src/stage/opt/app/pgaas/bin/check_cluster b/pgaas/src/stage/opt/app/pgaas/bin/check_cluster deleted file mode 100755 index ced7c0a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/check_cluster +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# NAME -# check_cluster - check the state of the cluster -# -# USAGE -# check_cluster [-v] [-l] [-t timeout] -# -l do not check localhost first (and restarting the service if necessary) -# -t timeout set how long to wait when accessing the servers -# -v verbose -# -# DESCRIPTION -# Loop through the nodes in the cluster, using pgwget to determine how many are masters, secondaries, down for maintenance, or not up. -# Complain about certain situations. -# If there are multiple masters, and this not the first master in the list, then: -# run pg_ctl_restart -# prevent /ro from returning true - -CDF=/opt/app/cdf -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi -PATH=$PGDIR/bin:$CDF/bin:/opt/app/pgaas/bin:$PATH - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - echo "Usage: $0 [-v] [-l] [-t timeout] [-d file]" - echo -e " -l do not check localhost first (and restarting the service if necessary)" - echo -e " -t timeout set how long to wait when accessing the servers" - echo -e " -v verbose" - echo -e " -d file duplicate the status output to the given file" - exit 1 -} - -VERBOSE=false -TIMEOUT=10 -TESTLOCAL=: -DFILE= -while getopts d:lt:v c -do - case "$c" in - d ) DFILE=$OPTARG ;; - l ) TESTLOCAL=false ;; - t ) TIMEOUT=$OPTARG ;; - v ) VERBOSE=: ;; - \?) usage ;; - esac -done -shift $(($OPTIND - 1)) - -# loop through the nodes in the cluster, using pgwget to determine if any are a master. Save in $@ -master_count=0 -secondary_count=0 -total_count=0 -down_count=0 -maintenance_count=0 - -MASTERS= -SECONDARIES= -MAINTENANCES= -DOWNS= - -MSEP= -SSEP= -BSEP= -DSEP= -HOSTNAME=$(hostname -f) -FOUNDPREVIOUSMASTER= -DOPGCTLSTOP= - -if $TESTLOCAL -then - isrw=`pgwget --tries=1 --read-timeout=$TIMEOUT --quiet -O/dev/stdout http://localhost:8000/isrw` - case "$isrw" in - Master | Secondary | Maintenance ) ;; - * ) - echo "$(date)|WARNING|RESTARTED|Local iDNS-responder not responding. Restarting." - ps -fu postgres | grep "python3 /opt/app/pgaas/lib/iDNS-responder" | grep -v grep | awk '{print "kill " $2}' | sh - sleep 10 - ;; - esac -fi - -for i in $(getpropvalue -n pgnodes | sed 's/|/ /g') -do - $VERBOSE && echo -n "Checking $i" - isrw=`pgwget --tries=1 --read-timeout=10 --quiet -O/dev/stdout http://$i:8000/isrw` - $VERBOSE && echo ": $isrw" - case "$isrw" in - Master ) - (( master_count = master_count + 1 )) - (( total_count = total_count + 1 )) - MASTERS="$MASTERS$MSEP$i" - MSEP=" " - if [ -z "$FOUNDPREVIOUSMASTER" ] - then FOUNDPREVIOUSMASTER=yes - elif [ -n "$FOUNDPREVIOUSMASTER" -a "$i" = $HOSTNAME ] - then DOPGCTLSTOP=yes - fi - ;; - Secondary ) - (( secondary_count = secondary_count + 1 )) - (( total_count = total_count + 1 )) - SECONDARIES="$SECONDARIES$SSEP$i" - SSEP=" " - ;; - Maintenance ) - (( maintenance_count = maintenance_count + 1 )) - (( total_count = total_count + 1 )) - MAINTENANCES="$MAINTENANCES$BSEP$i" - BSEP=" " - ;; - * ) - DOWNS="$DOWNS$DSEP$i" - DSEP=" " - (( down_count = down_count + 1 )) - (( total_count = total_count + 1 )) - ;; - esac -done - -(( up_count = master_count + secondary_count )) - -date=$(date) -output="$date|INFO|masters=$master_count $MASTERS|secondaries=$secondary_count $SECONDARIES|maintenance=$maintenance_count $MAINTENANCES|down=$down_count $DOWNS|" -echo "$output" -if [ -n "$DFILE" ] -then (umask 022; echo "$output" > $DFILE.tmp && mv $DFILE.tmp $DFILE) -fi - -FORCEROOFF=/var/run/postgresql/force-ro-off -if [ $master_count -lt 1 ] -then echo "$date|FATAL|NOMASTER|NO MASTER FOUND|" -elif [ $master_count -gt 1 ] -then echo "$date|FATAL|MULTIPLEMASTERS|TOO MANY MASTERS FOUND|" - if [ -n "$DOPGCTLSTOP" ] - then - touch "$FORCEROOFF" - pg_ctl_stop - fi -fi -if [ -z "$DOPGCTLSTOP" -a -f "$FORCEROOFF" ] -then rm -f "$FORCEROOFF" -fi -if [ $up_count -eq 0 ] -then echo "$date|FATAL|NOREADER|NO SECONDARY FOUND" -fi -if [ $down_count -ne 0 ] -then echo "$date|ERROR|DOWN|One or more systems are down: $DOWNS" -fi diff --git a/pgaas/src/stage/opt/app/pgaas/bin/dcae_admin_db.py b/pgaas/src/stage/opt/app/pgaas/bin/dcae_admin_db.py deleted file mode 100755 index e1ac744..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/dcae_admin_db.py +++ /dev/null @@ -1,892 +0,0 @@ -#!/usr/bin/python3 -# -*- indent-tabs-mode: nil -*- -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -""" - -NAME - dcae_admin_db.py - given a database description json file, update the current VM accordingly - -USAGE - dcae_admin_db.py [options] configurationChanged json-file - dcae_admin_db.py [options] suspend - dcae_admin_db.py [options] resume - dcae_admin_db.py [options] test - - options: - - -H / --dbhost= - host name, defaults to CFG['dcae_admin_db_hostname'] - -d / --dbdir= - database directory path, defaults to CFG['db_directory'] - -c / --dbconf= - database configuration path, defaults to CFG['db_configuration'] - -D / --dbname= - database name, defaults to CFG['dcae_admin_db_databasename'] - -U / --user= - user to login as, defaults to CFG['dcae_admin_db_username'] - -P / --password= - password for user, defaults to CFG['dcae_admin_db_password'] - -B / --bindir= - postgresql bin directory, defaults to CFG['pg_bin_directory'] - -i / --ignorefile= - skip configuration if this file is present, defaults to CFG['skip_configuration_file'] - -n / --nocreate - do not create the databases / users - -I / --ignoredb - ignore current state of database - -R / --remove - remove old databases / users - -J / --jsontop= - top of json tree, as in \"['pgaas']\" - -e / --errors= - where to redirect error output, defaults to CFG['dcae_admin_db_errors_file'] then stderr - -t / --trace= - where to redirect trace output, defaults to CFG['dcae_admin_db_trace_file'] then stderr - -v / --verbose - verbose, defaults to CFG['dcae_admin_db_verbosity'] - -DESCRIPTION - This program is intended to be executed by the DCAE controller manager. - -When creating a database and set of users, execute the equivalent of this: - - CREATE USER tstdb_admin WITH PASSWORD 'tst'; - CREATE USER tstdb_user WITH PASSWORD 'tst'; - CREATE USER tstdb_viewer WITH PASSWORD 'tst'; - - CREATE ROLE testdb_common_user_role; - CREATE ROLE testdb_common_viewer_role; - - CREATE DATABASE testdb with owner tstdb_admin; - - \connect testdb - - REVOKE ALL on DATABASE testdb FROM testdb_common_viewer_role; - REVOKE ALL on DATABASE testdb FROM testdb_common_user_role; - REVOKE ALL on DATABASE testdb FROM tstdb_user; - REVOKE ALL on DATABASE testdb FROM tstdb_viewer; - - GRANT testdb_common_viewer_role TO testdb_common_user_role; /* user can do everything viewer can */ - GRANT testdb_common_user_role TO tstdb_admin; /* admin can do everything user and viewer can */ - - GRANT CONNECT ON DATABASE testdb TO testdb_common_viewer_role; /* viewer, user, admin can connect */ - - CREATE SCHEMA testdb_db_common AUTHORIZATION tstdb_admin; /* create a schema we can optionally use */ - - ALTER ROLE tstdb_admin IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - ALTER ROLE testdb_common_user_role IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - ALTER ROLE testdb_common_viewer_role IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - - GRANT USAGE ON SCHEMA testdb_db_common TO testdb_common_viewer_role; /* viewer,user can select from schema */ - GRANT CREATE ON SCHEMA testdb_db_common TO tstdb_admin; /* admin can create on schema */ - - ALTER DEFAULT PRIVILEGES FOR ROLE tstdb_admin GRANT SELECT ON TABLES TO testdb_common_viewer_role; /* viewer, user, admin can select on tables */ - ALTER DEFAULT PRIVILEGES FOR ROLE tstdb_admin GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO testdb_common_user_role; /* user, admin can ins/upd/del/tru on tables */ - ALTER DEFAULT PRIVILEGES FOR ROLE tstdb_admin GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO testdb_common_user_role; /* user, admin can update on sequences */ - - GRANT TEMP ON DATABASE testdb TO testdb_common_user_role; /* user, admin can create temp tables */ - - GRANT testdb_common_user_role TO tstdb_user; - GRANT testdb_common_viewer_role TO tstdb_viewer; - ALTER ROLE tstdb_user IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - ALTER ROLE tstdb_viewer IN DATABASE testdb SET search_path = public, testdb_db_common; /* search_path is not inherited, so set it here */ - -""" - -import getopt -import psycopg2 -import sys -import re -import subprocess -import json -import os -import time - -sys.path.append("/opt/app/pgaas/lib") -sys.path.append("/opt/app/dcae-commonlogging/python") -import CommonLogger - -verbose = 0 -quiet = False -errorOutput = sys.stderr -traceOutput = sys.stderr -errorLogger = debugLogger = auditLogger = metricsLogger = None - -def usage(msg = None): - """ - Print a usage message and exit - """ - sys.stdout = sys.stderr - if msg != None: - print(msg) - print("Usage:") - print("dcae_admin_db.py [options] configurationChanged json-file") - print("dcae_admin_db.py [options] suspend") - print("dcae_admin_db.py [options] resume") - print("dcae_admin_db.py [options] test") - print("dcae_admin_db.py [options] newdb dbname admin-pswd user-pswd viewer-pswd") - print("") - print("options:") - print("-H / --dbhost= - host name, defaults to CFG['dcae_admin_db_hostname']") - print("-d / --dbdir= - database directory path, defaults to CFG['db_directory']") - print("-c / --dbconf= - database directory path, defaults to CFG['db_configuration']") - print("-D / --dbname= - database name, defaults to CFG['dcae_admin_db_databasename']") - print("-n / --nocreate - do not create the databases / users") - print("-I / --ignoredb - ignore current state of database") - print("-U / --user= - user to login as, defaults to CFG['dcae_admin_db_username']") - print("-P / --password= - password for user, defaults to CFG['dcae_admin_db_password']") - print("-B / --bindir= - postgresql bin directory, defaults to CFG['pg_bin_directory']") - print("-i / --ignorefile= - skip configuration if this file is present, defaults to CFG['skip_configuration_file']") - print("-R / --remove - remove old databases / users") - print("-J / --jsontop= - top of json tree, as in \"['pgaas']\"") - print("-l / --logcfg= - ECOMP DCAE Common Logging configuration file") - print("-e / --errors= - where to redirect error output, defaults to CFG['dcae_admin_db_errors_file'] then stderr") - print("-t / --trace= - where to redirect trace output, defaults to CFG['dcae_admin_db_trace_file'] then stderr") - print("-v - verbose") - sys.exit(2) - -def checkOption(options, name, propname, optletter, encrypted=False, cdfPropname = None): - """ - Check if the specified option exists. If not, grab it from the configuration file. - Complain if it still does not exist. - """ - if name not in options: - ret = getPgaasPropValue(propname, encrypted=encrypted, dflt=None, skipComplaining=True) - if ret is None and cdfPropname is not None: - ret = getCdfPropValue(cdfPropname, encrypted=encrypted) - options[name] = ret - requireOption("either %s or config[%s]" % (optletter, propname), options[name]) - -def reviewOpts(): - """ - Parse the options passed to the command, and return them in the dictionary - """ - try: - opts, args = getopt.getopt(sys.argv[1:], "B:c:D:d:e:H:IJ:l:nP:Rt:U:hv?", - [ "dbhost=", "dbdir=", "dbconf=", - "dbname=", "dbuser=", "dbpassword=", - "bindir=", "errors=", "trace=", "logcfg=", - "nocreate", "ignoredb", "remove", "ignorefile=", - "jsontop=", - "help", "verbose"]) - except getopt.GetoptError as err: - usage(str(err)) - - propVerbosity = getPgaasPropValue("dcae_admin_db_verbosity", dflt='0') - if propVerbosity is not None: - global verbose - verbose = int(propVerbosity) - retOptions = { } - ignoreFile = getPgaasPropValue("skip_configuration_file", dflt=None) - for o, a in opts: - if o in ("-v", "--verbose"): - # global verbose - verbose += 1 - elif o in ("-c", "--dbconf"): - retOptions["dbconf"] = a - elif o in ("-H", "--dbhost"): - retOptions["dbhost"] = a - elif o in ("-d", "--dbdir"): - retOptions["dbdir"] = a - elif o in ("-D", "--dbname"): - retOptions["dbname"] = a - elif o in ("-U", "--dbuser"): - retOptions["dbuser"] = a - elif o in ("-P", "--dbpassword"): - retOptions["dbpassword"] = a - elif o in ("-B", "--bindir"): - retOptions["bindir"] = a - elif o in ("-n", "--nocreate"): - retOptions["nocreate"] = True - elif o in ("-I", "--ignoredb"): - retOptions["ignoredb"] = True - elif o in ("-R", "--remove"): - retOptions["noremove"] = True - elif o in ("-J", "--jsontop"): - retOptions["jsontop"] = a - elif o in ("-l", "--logcfg"): - retOptions["logcfg"] = a - elif o in ("-e", "--errors"): - retOptions["errors"] = a - elif o in ("-i", "--ignorefile"): - ignoreFile = a - elif o in ("-t", "--trace"): - retOptions["trace"] = a - elif o in ("-h", "--help"): - usage() - else: - usage("unhandled option: %s" % o) - if "errors" not in retOptions: - retOptions["errors"] = getPgaasPropValue("dcae_admin_db_errors_file") - if "errors" in retOptions and retOptions["errors"] is not None: - try: - errorOutput = open(retOptions["errors"], "a") - except Exception as e: - die("Cannot open errors file '%s': %s" % (retOptions["errors"], e)) - if ignoreFile is not None: - trace("checking to see if skip_configuration_file(%s) exists" % ignoreFile) - retOptions["ignorefile"] = "yes" if os.path.isfile(ignoreFile) else "no" - trace("ignorefile=%s" % retOptions["ignorefile"]) - else: - retOptions["ignorefile"] = None - if "trace" not in retOptions: - retOptions["trace"] = getPgaasPropValue("dcae_admin_db_trace_file") - if "trace" in retOptions and retOptions["trace"] is not None: - try: - traceOutput = open(retOptions["trace"], "a") - except Exception as e: - die("Cannot open trace file '%s': %s" % (retOptions["trace"], e)) - if "logcfg" not in retOptions: - retOptions["logcfg"] = getPgaasPropValue("dcae_admin_db_common_logger_config") - if "logcfg" in retOptions and retOptions["logcfg"] is not None: - logcfg = retOptions["logcfg"] - import uuid - instanceUUID = uuid.uuid1() - serviceName = "DCAE/pgaas" - # print(">>>>>>>>>>>>>>>> using common logger. UUID=%s, serviceName=%s, cfg=%s" % (instanceUUID, serviceName, logcfg)) - global errorLogger, debugLogger, auditLogger, metricsLogger - errorLogger = CommonLogger.CommonLogger(logcfg, "error", instanceUUID=instanceUUID, serviceName=serviceName) - debugLogger = CommonLogger.CommonLogger(logcfg, "debug", instanceUUID=instanceUUID, serviceName=serviceName) - auditLogger = CommonLogger.CommonLogger(logcfg, "audit", instanceUUID=instanceUUID, serviceName=serviceName) - metricsLogger = CommonLogger.CommonLogger(logcfg, "metrics", instanceUUID=instanceUUID, serviceName=serviceName) - auditLogger.info("using common logger. UUID=%s, serviceName=%s, cfg=%s" % (instanceUUID, serviceName, logcfg)) - - checkOption(retOptions, "dbname", "dcae_admin_db_databasename", "-D") - checkOption(retOptions, "dbuser", "dcae_admin_db_username", "-U") - checkOption(retOptions, "dbpassword", "dcae_admin_db_password", "-P", encrypted=True, cdfPropname="postgres") - checkOption(retOptions, "dbhost", "dcae_admin_db_hostname", "-H") - checkOption(retOptions, "dbdir", "db_directory", "-d") - checkOption(retOptions, "bindir", "pg_bin_directory", "-B") - if "jsontop" not in retOptions: - retOptions["jsontop"] = getPgaasPropValue("dcae_admin_db_jsontop") - trace("env=%s" % str(os.environ)) - trace("ignorefile=%s" % ignoreFile) - return retOptions, args - -def main(): - keyedOptions, args = reviewOpts() - trace("Invoked as: %s" % str(sys.argv)) - audit("Invoked as: %s" % str(sys.argv)) - - if len(args) == 0: - usage("no operation specified") - elif args[0] == "configurationChanged": - if len(args) != 2: - usage("too many arguments") - configurationChanged(keyedOptions, args[1]) - elif args[0] == "suspend": - if len(args) != 1: - usage("too many arguments") - suspendOperations(keyedOptions) - elif args[0] == "resume": - if len(args) != 1: - usage("too many arguments") - resumeOperations(keyedOptions) - elif args[0] == "test": - if len(args) != 1: - usage("too many arguments") - testOperations(keyedOptions) - elif args[0] == "newdb": - if len(args) != 5: - usage("wrong number of arguments") - newDb(keyedOptions, args[1], args[2], args[3], args[4]) - else: - usage("unrecognized operation '%s'" % args[0]) - -def suspendOperations(options): - """ - Execute the "suspend" sub-command. - """ - runProgram(["pkill", "repmgrd"]) - program = options["bindir"] + "/pg_ctl" - cmd = [program, "stop", "-D", options["dbdir"]] - runProgram(cmd) - audit("suspendOperations") - -def resumeOperations(options): - """ - Execute the "resume" sub-command. - """ - cmd = [options["bindir"] + "/pg_ctl", "start", "-D", options["dbdir"], "-o", "configfile=" + options["dbconf"]] - runProgram(cmd) - runProgram(["/opt/app/pgaas/bin/repmgrcd", "-d"]) - audit("resumeOperations") - -def testOperations(options): - """ - Respond to the "test" sub-command. - """ - program = options["bindir"] + "/pg_ctl" - cmd = [program, "status", "-D", options["dbdir"]] - ret = runProgram(cmd) - # pg_ctl: no server running - # pg_ctl: server is running (PID: 13988) - # does /var/run/postgresql/inmaintenance exist? -> YELLOW - cmdRepmgr = ["pgrep", "repmgrd"] - retRepmgr = runProgram(cmdRepmgr) - - msg = "????" - if os.path.isfile("/var/run/postgresql/inmaintenance"): - msg = "YELLOW: in maintenance mode" - elif re.search("no server running", ret): - msg = "RED: no PG server running" - elif re.search("server is running", ret) and re.search("[0-9]+", retRepmgr): - msg = "GREEN" - elif re.search("server is running", ret): - msg = "YELLOW: no repmgrd running" - elif re.search("[0-9]+", retRepmgr): - msg = "YELLOW: no PG server running" - else: - msg = "YELLOW: neither PG server nor repmgrd are running" - audit("test: " + msg) - print(msg, end="") - -def runProgram(cmd): - """ - Run the given command, returning the standard output as a string. - If there is an error, return None. - """ - try: - p=subprocess.Popen(cmd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) - (stdout, stderr) = p.communicate() - except Exception as e: - print("Error running program because: {0}".format(e), file=errorOutput) - return None - else: - if stderr: - print("Error running program because: {0} ".format(stderr), file=errorOutput) - return None - else: - trace("runProgram() => " + str(stdout), minLevel=2) - return stdout.decode('utf-8').rstrip('\n') - -def configurationChanged(options, jsonFile): - """ - We received a new JSON configuration file - """ - audit("configurationChanged " + jsonFile) - if options["ignorefile"] == "yes": - trace("skipping database reconfiguration because skip_configuration_file exists") - return - - if not os.path.isfile(jsonFile): - die("json file %s does not exist" % jsonFile) - - try: - inp = json.load(open(jsonFile,"r")) - except Exception as e: - die("Cannot open jsonFile '%s': %s" % (jsonFile, e)) - - if verbose: - dumpJSON(inp, "incoming JSON") - - jsonTop = options["jsontop"] - if not jsonTop is None: - e = "inp" + jsonTop - trace("eval(%s)" % e) - inp = eval(e,{"__builtins__":None},{"inp":inp}) - if verbose: - dumpJSON(inp, "modified JSON") - - setupDictionaryDatabases(options, inp) - -def setupDictionaryDatabases(options, inp): - """ - Set up the databases listed in the dictionary - """ - - # trace("version=%s" % requireJSON("version", inp, "version")) - requireJSON("databases", inp, "databases") - con = None - try: - con = dbConnect(database = options["dbname"], user = options["dbuser"], password = options["dbpassword"], host = options["dbhost"]) - setupDatabases(con, options, requireJSON("databases", inp, "databases")) - - except psycopg2.DatabaseError as e: - die('Error %s' % e) - - finally: - if con: - con.commit() - con.close() - -def newDb(options, dbName, adminPswd, userPswd, viewerPswd): - """ - Given the database name and passwords, set up a database and corresponding users. - For example, with dbname="foo", adminPswd="fooa", userPswd="foou" and viewerPswd="foov", - act the same as if we had received the json configuration: - { - 'databases': { - 'foo': { - 'ownerRole': 'foo_admin', - 'roles': { - 'foo_admin': { - 'password': 'fooa', - 'role': 'admin' - }, - 'foo_user': { - 'password': 'foou', - 'role': 'writer' - }, - 'foo_viewer': { - 'password': 'foov', - 'role': 'reader' - } - } - } - } - } - """ - if not re.match("^[A-Za-z][A-Za-z0-9_]*$", dbName): - errorPrint("'%s' is not a valid database name" % dbName) - return - - adminName = dbName + "_admin" - userName = dbName + "_user" - viewerName = dbName + "_viewer" - - setupDictionaryDatabases(options, { - 'databases': { - dbName: { - 'ownerRole': adminName, - 'roles': { - adminName: { - 'password': adminPswd, - 'role': 'admin' - }, - userName: { - 'password': userPswd, - 'role': 'writer' - }, - viewerName: { - 'password': viewerPswd, - 'role': 'reader' - } - } - } - } - }) - -def dumpJSON(js, msg): - tracePrint("vvvvvvvvvvvvvvvv %s" % msg) - tracePrint(json.dumps(js, indent=4)) - tracePrint("^^^^^^^^^^^^^^^^ %s" % msg) - -def setupDatabases(con, options, dbList): - """ - Do what is needed to set up all of the databases - """ - currentDatabases = dbGetFirstColumnAsMap(con, "select datname from pg_database where datistemplate = false") - currentRolenames = dbGetFirstColumnAsMap(con, "select rolname from pg_roles") - trace("currentDatabases = " + str(currentDatabases)) - for dbName in dbList: - trace("dbName='%s'" % str(dbName)) - setupDatabase(con, options, currentDatabases, currentRolenames, dbName, dbList[dbName]) - -def setupDatabase(con, options, currentDatabases, currentRolenames, dbName, dbInfo): - """ - Do what is needed to set up a given databases and its users - """ - - dbOwnerRole = requireJSON("databases[].ownerRole", dbInfo, "ownerRole") - trace("dbName='%s', dbOwnerRole='%s'" % (dbName, dbOwnerRole)) - doesDbExist = dbName in currentDatabases - trace("does %s exist? %s" % (dbName, doesDbExist)) - foundOwnerRole = False - dbRoles = dbInfo["roles"] - for name in dbRoles: - u = dbRoles[name] - if name == dbOwnerRole and u["role"] == "admin": - foundOwnerRole = True - if u["role"] not in ("admin","writer","reader"): - die("For database %s, the role '%s' is not one of admin/writer/reader" % (dbName, u.role)) - if not foundOwnerRole: - die("For database %s, information on the ownerRole '%s' was not found" % (dbName, dbOwnerRole)) - for name in dbRoles: - userInfo = dbRoles[name] - if name in currentRolenames and ("ignoredb" not in options or not options["ignoredb"]): - trace("The role %s already exists, skipping" % name) - updatePassword(con, options, dbName, name, userInfo) - else: - setupUser(con, options, dbName, name, userInfo) - if doesDbExist and ("ignoredb" not in options or not options["ignoredb"]): - trace("The database %s already exists, skipping" % dbName) - else: - makeDatabase(con, options, dbName, dbOwnerRole, dbInfo, dbRoles) - for name in dbRoles: - userInfo = dbRoles[name] - if name in currentRolenames and ("ignoredb" not in options or not options["ignoredb"]): - trace("The role %s already exists, skipping grants" % name) - else: - modifyGrants(con, options, dbName, name, userInfo) - -def makeDatabase(con, options, dbName, dbOwnerRole, dbInfo, dbRoles): - """ - Execute the SQL to create a database - - TODO: verify grants against what is actually there - """ - ownerRole = dbInfo["ownerRole"] - userRole = "{0}_common_user_role".format(dbName) - viewerRole = "{0}_common_viewer_role".format(dbName) - - optionalDbExecute(con, options, "CREATE ROLE {0}".format(userRole)) - optionalDbExecute(con, options, "CREATE ROLE {0}".format(viewerRole)) - - trace("Creating database %s with owner '%s'" % (dbName, ownerRole)) - optionalDbExecute(con, options, "CREATE DATABASE %s WITH OWNER %s" % (dbName, ownerRole)) - con2 = None - try: - con2 = dbConnect(database = dbName, user = options["dbuser"], password = options["dbpassword"], host = options["dbhost"]) - - optionalDbExecute(con2, options, "REVOKE ALL on DATABASE {0} FROM {1}".format(dbName, viewerRole)) - optionalDbExecute(con2, options, "REVOKE ALL on DATABASE {0} FROM {1}".format(dbName, userRole)) - for name in dbRoles: - userInfo = dbRoles[name] - if userInfo["role"] == "writer" or userInfo["role"] == "reader": - optionalDbExecute(con2, options, "REVOKE ALL on DATABASE {0} FROM {1}".format(dbName, name)) - - # user can do everything viewer can - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(viewerRole, userRole)) - # admin can do everything user and viewer can - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(userRole, ownerRole)) - - # viewer, user, admin can connect - optionalDbExecute(con2, options, "GRANT CONNECT ON DATABASE {0} TO {1}".format(dbName, viewerRole)) - - # create a schema we can optionally use * - schemaName = "{0}_db_common".format(dbName) - optionalDbExecute(con2, options, "CREATE SCHEMA if not exists {0} AUTHORIZATION {1}".format(schemaName, ownerRole)) - - # search_path is not inherited, so set it here - for role in [ ownerRole, userRole, viewerRole ]: - optionalDbExecute(con2, options, "ALTER ROLE {1} IN DATABASE {0} SET search_path = public, {2}".format(dbName, role, schemaName)) - - # viewer,user can select from schema - optionalDbExecute(con2, options, "GRANT USAGE ON SCHEMA {0} TO {1}".format(schemaName, viewerRole)) - # admin can create on schema - optionalDbExecute(con2, options, "GRANT CREATE ON SCHEMA {0} TO {1}".format(schemaName, ownerRole)) - - # viewer, user, admin can select on tables - optionalDbExecute(con2, options, "ALTER DEFAULT PRIVILEGES FOR ROLE {1} GRANT SELECT ON TABLES TO {0}".format(viewerRole, ownerRole)) - # user, admin can ins/upd/del/tru on tables - optionalDbExecute(con2, options, "ALTER DEFAULT PRIVILEGES FOR ROLE {1} GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO {0}".format(userRole, ownerRole)) - # user, admin can update on sequences - optionalDbExecute(con2, options, "ALTER DEFAULT PRIVILEGES FOR ROLE {1} GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO {0}".format(userRole, ownerRole)) - - # user, admin can create temp tables - optionalDbExecute(con2, options, "GRANT TEMP ON DATABASE {0} TO {1}".format(dbName, userRole)) - - for name in dbRoles: - userInfo = dbRoles[name] - if userInfo["role"] == "writer": - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(userRole, name)) - elif userInfo["role"] == "reader": - optionalDbExecute(con2, options, "GRANT {0} TO {1}".format(viewerRole, name)) - - # search_path is not inherited, so set it here - optionalDbExecute(con2, options, "ALTER ROLE {1} IN DATABASE {0} SET search_path = public, {2}".format(dbName, name, schemaName)) - - except psycopg2.DatabaseError as e: - die('Error %s' % e) - - finally: - if con2: - con2.commit() - con2.close() - -def checkUsername(userName): - """ - A value of type name is a string of 63 or fewer characters1. A name must start - with a letter or an underscore; the rest of the string can contain letters, - digits, and underscores. - """ - trace("checkUsername(%s)" % userName) - if re.match("[A-Za-z_][A-Za-z0-9_]*$", userName): - return True - else: - errorPrint("%s is not a valid userName" % userName) - return False - -def setupUser(con, options, dbName, userName, userInfo): - """ - Do what is needed to to set up a user for a database - """ - if checkUsername(userName): - trace("For dbName='%s', create user '%s'" % (dbName, userName)) - userPassword = userInfo["password"] - optionalDbExecute(con, options, "create user %s with password '%s'" % (userName, userPassword)) - -def updatePassword(con, options, dbName, userName, userInfo): - """ - Do what is needed to update a user's password - """ - if checkUsername(userName): - trace("For dbName='%s', alter user '%s' password" % (dbName, userName)) - userPassword = userInfo["password"] - optionalDbExecute(con, options, "alter user %s with password '%s'" % (userName, userPassword)) - -def modifyGrants(con, options, dbName, userName, userInfo): - """ - Do what is needed to to set up a user for a database with the proper grants - - TODO: if user exist, verify current grants - """ - if checkUsername(userName): - userRole = userInfo["role"] - trace("For dbName='%s', set up user '%s' as a '%s'" % (dbName, userName, userRole)) - if userRole == "writer": - optionalDbExecute(con, options, "grant %s_common_user_role to %s" % (dbName, userName)) - elif userRole == "reader": - optionalDbExecute(con, options, "grant %s_common_viewer_role to %s" % (dbName, userName)) - # elif userRole == "admin": - # optionalDbExecute(con, options, "grant %s_common_admin_role to %s" % (dbName, userName)) - else: - trace("nothing to grant %s" % userName) - -def optionalDbExecute(con, options, cmd): - if "nocreate" in options and options["nocreate"]: - print(cmd) - else: - audit("Running: " + cmd) - dbExecute(con, cmd) - -""" -database utility functions -""" - -# def dbGetMap(con, cmd, args=[], skipTrace=False): -# def dbGetOneRowMap(con, cmd, args=[], skipTrace=False): - -def dbGetFirstRowOneValue(con, cmd, args=[], skipTrace=False): - """ - Do a select and return a single value from the first row - """ - row = dbGetFirstRow(con, cmd, args, skipTrace) - trace("row=" + str(row)) - if row is not None and len(row) > 0: - return row[0] - return None - -def dbGetFirstRow(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the values from the first row - """ - cursor = dbExecute(con, cmd, args, skipTrace) - return cursor.fetchone() - -def dbGetFirstColumn(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the first column's value from each row - """ - ret = [] - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret.append(col) - break - return ret - -def dbGetFirstColumnAsMap(con, cmd, args=[], skipTrace=False, val=1): - """ - Do a select and return the first column's value from each row - """ - ret = {} - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret[col] = val - break - return ret - -def dumpTable(con, tableName, max=-1): - """ - If being extra verbose, print out the entire table - """ - if verbose < 2: - return - print("================ " + tableName + " ================", file=traceOutput) - - cols = dbGetFirstColumn(con, "select column_name from information_schema.columns where table_name='" + tableName + "'", skipTrace=True) - print("num", end="|", file=traceOutput) - for col in cols: - print(col, end="|", file=traceOutput) - print("", file=traceOutput) - - if max > -1: - cursor = dbExecute(con, "select * from " + tableName + " limit " + str(max), skipTrace=True) - else: - cursor = dbExecute(con, "select * from " + tableName, skipTrace=True) - i = 0 - for row in cursor: - print("%d" % i, end="|", file=traceOutput) - i += 1 - for col in row: - print("%s" % (col), end="|", file=traceOutput) - print("", file=traceOutput) - print("================================================", file=traceOutput) - -def dbExecute(con, statement, args=[], skipTrace=False): - """ - Create a cursor, instantiate the arguments into a statement, trace print the statement, and execute the statement. - Return the cursor - """ - cursor = con.cursor() - stmt = cursor.mogrify(statement, args); - if not skipTrace: - trace("executing:" + str(stmt)) - cursor.execute(stmt) - global quiet - if not skipTrace: - trace("statusmessage=" + cursor.statusmessage + ", rowcount=" + str(cursor.rowcount)) - return cursor - -def dbConnect(database, user, password, host, autocommit = True): - """ - Create a connection, logging it in the process - Return the connection - """ - trace("connecting to database %s as %s on host %s" % (database, user, host)) - con =psycopg2.connect(database = database, user = user, password = password, host = host) - con.autocommit = autocommit - return con - -""" -Utility functions -""" - -def die(msg): - """ - Print a message to the error file and exit. - """ - errorPrint(msg) - sys.exit(1) - -def errorPrint(msg, file=errorOutput): - """ - Print a message to the error file. - """ - global errorLogger - # print("----------------> errorLogger=%s" % str(errorLogger)) - if errorLogger is not None: - errorLogger.error(msg) - else: - taggedPrint("ERROR", msg, file=file) - - -def tracePrint(msg, file=traceOutput): - """ - Print a message to the trace file. - """ - global debugLogger - # print("----------------> debugLogger=%s" % str(debugLogger)) - if debugLogger is not None: - debugLogger.debug(msg) - else: - taggedPrint("DEBUG", msg, file=file) - -def taggedPrint(tag, msg, file): - """ - Print a message to the trace file. - """ - dt = time.strftime('%Y-%m-%d %T', time.localtime()) - print("%s %s: %s" % (dt, tag, msg), file=file) - -def requireOption(nm, val): - """ - Die if a program parameter is not set - """ - return require("option", nm, val) - -def requireJSON(prnm, dict, nm): - """ - Die if a JSON value is not set - """ - if nm not in dict: - die("The JSON value '%s' is missing" % prnm) - return dict[nm] - -def require(type, nm, val): - """ - Die if a value is not set - """ - if val is None: - die("The %s '%s' is missing" % (type, nm)) - return val - -def trace(msg, minLevel=1): - """ - Print a message to trace output if verbose is turned on. - """ - global verbose - if verbose >= minLevel: - tracePrint(msg) - -def audit(msg): - """ - Print a message to audit log if one is being used - """ - global auditLogger - if auditLogger is not None: - auditLogger.info(msg) - -def getCdfPropValue(nm, encrypted=False, cfg="/opt/app/cdf/lib/cdf.cfg", dflt=None, skipComplaining=False): - """ - Return a value from the configuration file /opt/app/cdf/lib/cdf.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt, skipComplaining=skipComplaining) - -def getPgaasPropValue(nm, encrypted=False, cfg="/opt/app/pgaas/lib/pgaas.cfg", dflt=None, skipComplaining=False): - """ - Return a value from the configuration file /opt/app/pgaas/lib/pgaas.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt, skipComplaining=skipComplaining) - -getPropDict = { } - -def getPropValue(nm, encrypted=False, cfg=None, dflt=None, skipComplaining=False): - """ - Return a value from the specified configuration file - """ - if cfg is None: - return None - global getPropDict - if getPropDict.get(cfg): - savedDate = getPropDict[cfg] - # trace("getPropValue: savedDate[" + cfg + "]=" + str(savedDate)) - cfgDate = os.path.getmtime(cfg) - # trace("getPropValue: cfgDate=" + str(cfgDate)) - if float(savedDate) >= float(cfgDate): # cfg has not changed - val = getPropDict.get(cfg + ":" + nm) - # trace("getPropValue: val=" + val) - if val is not None: - # trace("getPropValue: getPropValue(saved) => '%s'" % str(val)) - return val - else: # clear out any previously saved keys - cfgcolon = cfg + ":" - for k in list(getPropDict.keys()): - if re.match(cfgcolon, k): - del getPropDict[k] - getPropValueProgram = '/opt/app/cdf/bin/getpropvalue' - if encrypted: - cmd = [getPropValueProgram, "-f", cfg, "-x", "-n", nm] - else: - cmd = [getPropValueProgram, "-f", cfg, "-n", nm] - # trace("getPgaasPropValue: cmd=" + str(cmd)) - - try: - with subprocess.Popen(cmd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) as p: - (origString, stderrString) = p.communicate() - except Exception as e: - traceback.print_exc() - print("Error decoding string because {0}".format(e), file=errorOutput) - return None - else: - if stderrString: - if not re.search("Configuration property .* must be defined", stderrString.decode('utf-8')) and not skipComplaining: - print("Error decoding string because: {0} ".format(stderr), file=errorOutput) - return dflt - else: - trace("getPgaasPropValue() => " + str(origString), minLevel=2) - return origString.decode('utf-8').rstrip('\n') - -if __name__ == "__main__": - main() diff --git a/pgaas/src/stage/opt/app/pgaas/bin/dump-designate-zone b/pgaas/src/stage/opt/app/pgaas/bin/dump-designate-zone deleted file mode 100755 index 5e9ff44..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/dump-designate-zone +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -import requests, sys, os, subprocess, argparse - -def checkstatus(resp, msg): - if resp.status_code >= 300: - print(resp) - print(resp.content) - raise Exception(msg) - -def reportrs(): - resp = requests.get('{0}/v2/zones/{1}/recordsets?limit=1000'.format(dns, zid), headers=osauth) - checkstatus(resp, 'Failed to list recordsets') - for rs in resp.json()['recordsets']: - tl = '' - if 'ttl' in rs and rs['ttl'] is not None: - tl = ' {0}'.format(rs['ttl']) - print('# {0}'.format(rs['id'])) - for r in rs['records']: - print('{0}{1} IN {2} {3}'.format(rs['name'], tl, rs['type'], r)) - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description="Dump a Designate zone registration") - parser.add_argument("-a", "--authurl", type=str, help="Authentication URL), defaults to $DESIGNATEAUTHURL") - parser.add_argument("-t", "--tenantname", type=str, help="Tenant name") - parser.add_argument("-u", "--user", type=str, help="Username, defaults to $DESIGNATEUSER") # , default=os.environ.get('DESIGNATEUSER')) - parser.add_argument("-p", "--password", type=str, help="Password, defaults to $DESIGNATEPASSWORD") # , default=os.environ.get('DESIGNATEPASSWORD')) - parser.add_argument("-d", "--domain", type=str, help="Domain to search, defaults to $DESIGNATEDOMAIN") # , default=os.environ.get('DESIGNATEDOMAIN')) - parser.add_argument("-T", "--timeout", type=int, help="Timeout on requests, defaults to 120", default=120) # , default=os.environ.get('DESIGNATEDOMAIN')) - parser.add_argument("-v", "--verbose", help="turn on debugging", action="store_true") # , default=os.environ.get('DESIGNATEURL')) - args = parser.parse_args() - - def checkarg(arg, var, parms, dflt = None): - if not arg: arg = os.environ.get(var) - if not arg: arg = dflt - if not arg: exit(parms + "/$" + var + " not set") - return arg - - args.authurl = checkarg(args.authurl, "DESIGNATEAUTHURL", "-a/--authurl") - args.tenantname = checkarg(args.tenantname, "DESIGNATETENANTNAME", "-t/--tenantname") - args.user = checkarg(args.user, "DESIGNATEUSER", "-u/--user") - args.password = checkarg(args.password, "DESIGNATEPASSWORD", "-p/--password") - args.domain = checkarg(args.domain, "DESIGNATEDOMAIN", "-d/--domain", subprocess.run(['dnsdomainname'], stdout=subprocess.PIPE).stdout.decode('utf-8').rstrip()) - if not args.domain.endswith("."): args.domain = args.domain + "." - - print("Domain = {0}".format(args.domain)) - - resp = requests.post(args.authurl + '/tokens', json={'auth':{'tenantName': args.tenantname, 'passwordCredentials': {'username': args.user, 'password': args.password }}}, timeout=args.timeout) - checkstatus(resp, 'Failed to get identity token') - respj = resp.json()['access'] - osauth = {'X-Auth-Token': respj['token']['id'] } - dns = None - for se in respj['serviceCatalog']: - if se['type'] == 'dns': - dns = se['endpoints'][0]['publicURL'] - break - if not dns: - printf("No dns record found") - else: - print('DNS is {0}'.format(dns)) - - resp = requests.get('{0}/v2/zones'.format(dns), headers=osauth, timeout=args.timeout) - checkstatus(resp, 'Failed to list zones') - respj = resp.json()['zones'] - zid = None - for z in respj: - if args.verbose: print("Looking at %s" % z, file=sys.stderr) - if z['name'] == args.domain: - zid = z['id'] - break - - if not zid: - print("Domain {0} not found".format(args.domain)) - else: - print('Zone is {0}'.format(zid)) - reportrs() diff --git a/pgaas/src/stage/opt/app/pgaas/bin/gen-repmgr-info b/pgaas/src/stage/opt/app/pgaas/bin/gen-repmgr-info deleted file mode 100755 index b210e58..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/gen-repmgr-info +++ /dev/null @@ -1,247 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# NAME -# gen-repmgr-info - extract information about the system appropriate for use with repmgr -# -# DESCRIPTION -# gen-repmgr-info -n hosts options... -# -# for a list of hosts such as "uiopzxc5pepstg00.grant.example.com|uiopzxc5pepstg01.grant.example.com|uiopmtc6njpstg00.grant.example.com|uiopmtc6njpstg01.grant.example.com" -# extract various pieces of information about the list. For example, generate a list of repmgr node numbers like this: -# uiopzxc5pepstg00.grant.example.com 100 -# uiopzxc5pepstg01.grant.example.com 101 -# uiopmtc6njpstg00.grant.example.com 200 -# uiopmtc6njpstg01.grant.example.com 201 - -use strict vars; - -use Getopt::Std; -use Digest::SHA qw(sha256_hex); - -sub usage { - my $msg = shift; - print "$msg\n" if $msg; - print "Usage: $0 -n 'node|node|node|...' [-S] [-s site] [-L] [-l node] [-c node] [-C node] [-m] [-M node] [-e] [-v] [-p]\n"; - print "-n list of nodes (FQDNs), |-separated\n"; - print "-S show list of all sites and their node # values\n"; - print "-s site\tshow the node # value for a given site\n"; - print "-L show list of all nodes and their node # values\n"; - print "-l node\tshow the node # value for a given node\n"; - print "-C node\tshow the machine name that a given node should cascade from, or DEFAULT\n"; - print "-c node\tshow the machine node # that a given node should cascade from, or DEFAULT\n"; - print "-e node\tshow the list of nodes on the same site as the given node, |-separated\n"; - print "-m\twhich system is the 'master'\n"; - print "-M node\twhich system matches the given node, taking FQDN into consideration\n"; - print "-v\tverbose\n"; - print "-p\tprint the node names in sorted order\n"; - exit 1; -} - - -my %optargs; -getopts('C:c:e:E:Ll:M:mn:pPSs:v', \%optargs) or usage(); -my $verbose = $optargs{v}; - -my $pgnodes = $optargs{n} or usage("-n is required"); - -# generate the data about the nodes -my @pgnodes = sort split(/[|]/, $pgnodes); - -# @sites contains the list of all site names. -# For uiopzxc5pepstg01.grant.example.com, the sitename will be uiopzxc5pepstg. -my @sites = genSites(); -my %pgnodesToSite = genPgnodeToSites(); - -# The %siteValues contains 100, 200, etc for each site name -# print "\nsites=" . join("\n", @sites); -my %siteValues = genSiteValues(); - -# The %pgnodeValues contains 100, 101, 200, 201, etc for each node name -my %pgnodeValues = genPgnodeValues(); -# The %valuesToPgnode contains node names for each value -my %valuesToPgnode = genValuesToPgnodes(); - -if ($optargs{L}) { - for my $pgnode (@pgnodes) { - print "$pgnode $pgnodeValues{$pgnode}\n"; - } -} - -if ($optargs{S}) { - for my $site (@sites) { - print "$site $siteValues{$site}\n"; - } -} - -if ($optargs{s}) { - for my $site (@sites) { - print "$siteValues{$site}\n" if $site eq $optargs{s}; - } -} - -if ($optargs{l}) { - for my $pgnode (@pgnodes) { - print "$pgnodeValues{$pgnode}\n" if $pgnode eq $optargs{l}; - } -} - -if ($optargs{c}) { - my $pgnode = $optargs{c}; - my $pgnodeValue = $pgnodeValues{$pgnode}; - my $masterValue = int($pgnodeValue / 100) * 100; - if (($masterValue > 100) && (($masterValue % 100) > 0)) { - print "$masterValue\n"; - } else { - print "DEFAULT\n"; - } -} - -if ($optargs{C}) { - my $pgnode = $optargs{C}; - my $pgnodeValue = $pgnodeValues{$pgnode}; - my $masterValue = int($pgnodeValue / 100) * 100; - # print "pgnode=$pgnode, pgnodeValue=$pgnodeValue, masterValue=$masterValue\n"; - if (($pgnodeValue % 100) > 0) { - print "$valuesToPgnode{$masterValue}\n"; - } else { - print "DEFAULT\n"; - } -} - -sub enodes { - my $pgnodeSearch = $optargs{e}; - my $siteSearch = $pgnodesToSite{$pgnodeSearch}; - my $ret = ""; - # print "looking for $pgnodeSearch in $siteSearch\n"; - my $sep = ""; - for my $pgnode (@pgnodes) { - my $site = $pgnodesToSite{$pgnode}; - # print "looking at $pgnode in $site\n"; - if ($site eq $siteSearch) { - $ret .= "$sep$pgnode"; - $sep = "|"; - } - } - return $ret; -} - -if ($optargs{e}) { - my $ret = enodes(); - print "$ret\n"; -} - -if ($optargs{E}) { - print sha256_hex(enodes()) . "\n"; -} - -if ($optargs{m}) { - print "$pgnodes[0]\n"; -} - -if ($optargs{M}) { - my $node = $optargs{M}; - if ($node =~ /[.]/) { - print "$node\n"; - } else { - my $found; - for my $pgnode (@pgnodes) { - if ($pgnode =~ /^$node[.]/) { - print $node; - $found = 1; - last; - } - } - } -} - -sub pnodes { - return join("|", @pgnodes); -} - -if ($optargs{p}) { - print pnodes() . "\n"; -} - -if ($optargs{P}) { - print sha256_hex(pnodes()) . "\n"; -} - -# for a given node name uiopzxc5pepstg01.grant.example.com, the return uiopzxc5pepstg. -sub nodeToSite { - my $site = shift; - $site =~ s/[.].*//; - $site =~ s/\d*$//; - return $site; -} - -# from a list of nodes, generate the sorted list of sites -sub genSites { - my %sites = (); - # print "pgnodes=" . join("\n", @pgnodes); - for my $pgnode (@pgnodes) { - my $site = nodeToSite($pgnode); - $sites{$site} = $site; - } - my @sites = sort keys %sites; - return @sites; -} - -# from a list of nodes, generate a mapping from them to their sites -sub genPgnodeToSites { - my %sites = (); - for my $pgnode (@pgnodes) { - $sites{$pgnode} = nodeToSite($pgnode); - } - return %sites; -} - -# generate the 100, 200, etc for each site name -sub genSiteValues { - my %siteValues; - for (my $i = 0; $i <= $#sites; $i++) { - $siteValues{$sites[$i]} = ($i+1) * 100; - } - # print "\nsiteValues=\n"; for my $site (@sites) { print "$site $siteValues{$site}\n"; } - return %siteValues; -} - -sub genPgnodeValues { - my %pgnodeValues; - my $i = 0; - my $lastSite = ''; - for my $pgnode (@pgnodes) { - my $thisSite = nodeToSite($pgnode); - if ($thisSite eq $lastSite) { - $i++; - } else { - $i = 0; - } - $lastSite = $thisSite; - $pgnodeValues{$pgnode} = $siteValues{$thisSite} + $i; - } - # print "\nnodeValues=\n"; for my $pgnode (@pgnodes) { print "$pgnode $pgnodeValues{$pgnode}\n"; } - return %pgnodeValues; -} - -sub genValuesToPgnodes { - my %valuesToPgnode; - for my $pgnode (keys %pgnodeValues) { - my $value = $pgnodeValues{$pgnode}; - $valuesToPgnode{$value} = $pgnode; - } - return %valuesToPgnode; -} - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/healthcheck_status b/pgaas/src/stage/opt/app/pgaas/bin/healthcheck_status deleted file mode 100644 index 4e99de0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/healthcheck_status +++ /dev/null @@ -1,3 +0,0 @@ -curl http://localhost:8000/healthcheck/status -curl http://localhost:8000/healthcheck/writablestatus -curl http://localhost:8000/healthcheck/readonlystatus diff --git a/pgaas/src/stage/opt/app/pgaas/bin/in.json b/pgaas/src/stage/opt/app/pgaas/bin/in.json deleted file mode 100755 index 697a51f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/in.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - # sample configuration file for dcae_admin_db - "vmConfiguration": { - "$class": "org.onap.dcae.controller.service.storage.postgres.service.PostgresServiceConfiguration", - "state": "master", - "databases": { - "odcit": { - "created": "2016-05-10T01:52:39.431+0000", - "description": "A&AI DCAE Central Inventory", - "ownerRole": "odcit_admin", - "contacts": {"ws4361": { - "created": "2016-05-10T01:52:39.431+0000", - "fullName": "Wen Shang" - }}, - "roles": { - "odcit_admin": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "odcit123", - "role": "admin", - "roleComments": [] - }, - "odcit_user": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "odcit123", - "role": "writer", - "roleComments": [] - }, - "odcit_viewer": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "odcit123", - "role": "reader", - "roleComments": [] - } - } - }, - "dmaap": { - "created": "2016-05-10T01:52:39.431+0000", - "description": "DMAAP Databus Configuration", - "ownerRole": "dmaap_admin", - "contacts": {"dl715d": { - "created": "2016-05-10T01:52:39.431+0000", - "fullName": "Dominic Lunanuova" - }}, - "roles": { - "dmaap_admin": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dmaap123", - "role": "admin", - "roleComments": [] - }, - "dmaap_user": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dmaap123", - "role": "writer", - "roleComments": [] - }, - "dmaap_viewer": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dmaap123", - "role": "reader", - "roleComments": [] - } - } - }, - "dcae_inv": { - "created": "2016-05-10T01:52:39.431+0000", - "description": "Running DCAE Services", - "ownerRole": "dcae_inv_admin", - "contacts": { - "mh677g": { - "created": "2016-05-10T01:52:39.431+0000", - "fullName": "Michael Hwang" - }}, - "roles": { - "dcae_inv_admin": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dcae_inv123", - "role": "admin", - "roleComments": [] - }, - "dcae_inv_user": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dcae_inv123", - "role": "writer", - "roleComments": [] - }, - "dcae_inv_viewer": { - "created": "2016-05-10T01:52:39.431+0000", - "password": "dcae_inv123", - "role": "reader", - "roleComments": [] - } - } - } - } - } -}
\ No newline at end of file diff --git a/pgaas/src/stage/opt/app/pgaas/bin/isrw b/pgaas/src/stage/opt/app/pgaas/bin/isrw deleted file mode 100755 index d9e925e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/isrw +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin:$PATH - -if [ -f /var/run/postgresql/inmaintenance ] -then - echo "Maintenance" -else - case `show_pg_is_in_recovery` in - *f* ) echo "Master" ;; - *t* ) echo "Secondary" ;; - esac -fi diff --git a/pgaas/src/stage/opt/app/pgaas/bin/list_masters b/pgaas/src/stage/opt/app/pgaas/bin/list_masters deleted file mode 100755 index a5e4506..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/list_masters +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# NAME -# list_masters - loop through the nodes in the cluster, using pgwget to determine if any are a master. - -CDF=/opt/app/cdf -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi -PATH=$PGDIR/bin:$CDF/bin:/opt/app/pgaas/bin:$PATH - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - echo "Usage: $0 [-r] [-v]" - echo -e " -r check /ro instead of /rw" - echo -e " -v verbose" - exit 1 -} - -VERBOSE=false -CMD=rw -QUIET=--quiet -OUTPUT=-O/dev/null -while getopts rvQ c -do - case "$c" in - r ) CMD=ro ;; - Q ) QUIET= OUTPUT= ;; - v ) VERBOSE=: ;; - \?) usage ;; - esac -done -shift $(($OPTIND - 1)) - -# loop through the nodes in the cluster, using pgwget to determine if any are a master. Save in $@ -for i in $(getpropvalue -n pgnodes | sed 's/|/ /g') -do - $VERBOSE && echo "Checking $i" - if pgwget $QUIET $OUTPUT http://$i:8000/$CMD - then set -- "$@" $i - fi -done - -echo "$@" -case "$CMD" in - rw ) - case $# in - 1 ) exit 0 ;; # one master exists and is running - 0 ) exit 1 ;; # no masters exist - * ) exit 2 ;; # more than one master exist - esac - ;; - ro ) - case $# in - 0 ) exit 1 ;; # no masters exist - * ) exit 0 ;; # one or more masters+secondaries exist - esac - ;; -esac diff --git a/pgaas/src/stage/opt/app/pgaas/bin/makefile b/pgaas/src/stage/opt/app/pgaas/bin/makefile deleted file mode 100644 index 3e08be0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/makefile +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -PYFILES= dcae_admin_db.py -SHFILES= check_cluster isrw list_masters pg_copy \ - pg_ctl_promote pg_ctl_restart pg_ctl_start pg_ctl_status pg_ctl_stop repmgrc repmgrdc \ - runpsql runpsqll startpsql setpropvalue show_pg_is_in_recovery show_pg_stat_activity show_pg_stat_archiver show_pg_stat_bgwriter \ - show_pg_stat_database show_pg_stat_database_conflicts show_pg_statio_user_functions show_pg_statio_user_indexes \ - show_pg_statio_user_sequences show_pg_statio_user_tables show_pg_stat_user_indexes show_pg_stat_user_tables \ - update_var_run_isrw startbackup stopbackup - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/bin - mkdir -p $(STAGEDIR)/$(DISTPATH)/bin - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/bin/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/bin/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/bin/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/bin/$$i; \ - fi; \ - ;; \ - esac; \ - done - -NODES="uiopmno5qwpstg01.grant.example.com|uiopmno5qwpstg00.grant.example.com|uiopmno6qwpstg00.grant.example.com|uiopmno6qwpstg01.grant.example.com" - -test-admin: - sudo -u postgres ./dcae_admin_db.py configurationChanged in.json - -test-gen: - ./gen-repmgr-info -n $(NODES) - ./gen-repmgr-info -S -L -n $(NODES) - ./gen-repmgr-info -s uiopmno6qwpstg -n $(NODES) - ./gen-repmgr-info -l uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno5qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno5qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno6qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -c uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -e uiopmno5qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -e uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -m -n $(NODES) - ./gen-repmgr-info -C uiopmno5qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -C uiopmno5qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -C uiopmno6qwpstg00.grant.example.com -n $(NODES) - ./gen-repmgr-info -C uiopmno6qwpstg01.grant.example.com -n $(NODES) - ./gen-repmgr-info -p -n $(NODES) diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_copy b/pgaas/src/stage/opt/app/pgaas/bin/pg_copy deleted file mode 100755 index ee2272b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_copy +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -# pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname -# pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - b=$(basename $0) - echo "Usage: $b [-v] -H fromhost [-P fromport] -U fromuser -D fromdb [-A | -S] -h tohost [-p toport] -h touser -d todb" - echo "Copy a database from a one host to a another" - echo -e "-H\tFQDN of host to copy from" - echo -e "-P\tport of database being copied from" - echo -e "-U\tUSER to login as on remote host being copied from" - echo -e "-W\tPASSWORD to use to login as on remote host being copied from" - echo -e "-D\tDB database on host to be copied from" - echo -e "-A\tcopy data only" - echo -e "-S\tcopy schema only" - echo -e "-h\tFQDN of host to copy to" - echo -e "-p\tport of database being copied to" - echo -e "-u\tUSER to login as on host being copied to" - echo -e "-w\tPASSWORD to use to login as on host being copied to" - echo -e "-d\tDB database on host to be copied to" - exit 1 -} - -REMOTEDATAONLY= -REMOTESCHEMAONLY= -REMOTEHOST= -REMOTEPORT= -REMOTEUSER= -REMOTEPASSWORD= -REMOTEDB= -LOCALHOST= -LOCALPORT= -LOCALUSER= -LOCALDB= -LOCALPASSWORD - -while getopts ASH:P:U:W:D:h:p::u:w:d: c -do - case $c in - A ) REMOTEDATAONLY=-a ;; - S ) REMOTESCHEMAONLY=-s ;; - H ) REMOTEHOST=$OPTARG ;; - P ) REMOTEPORT=$OPTARG ;; - U ) REMOTEUSER=$OPTARG ;; - W ) REMOTEPASSWORD=$OPTARG ;; - D ) REMOTEDB=$OPTARG;; - h ) LOCALHOST=$OPTARG ;; - p ) LOCALPORT=$OPTARG ;; - u ) LOCALUSER=$OPTARG ;; - w ) LOCALPASSWORD=$OPTARG ;; - d ) LOCALDB=$OPTARG;; - esac -done - - -[ -z "$REMOTEHOST" ] && usage "Missing -H option" -[ -z "$REMOTEPORT" ] && usage "Missing -P option" -[ -z "$REMOTEUSER" ] && usage "Missing -U option" -[ -z "$REMOTEDB" ] && usage "Missing -D option" -[ -z "$REMOTEPASSWORD" ] && usage "Missing -W option" -[ -z "$LOCALHOST" ] && usage "Missing -h option" -[ -z "$LOCALPORT" ] && usage "Missing -p option" -[ -z "$LOCALUSER" ] && usage "Missing -u option" -[ -z "$LOCALPASSWORD" ] && usage "Missing -w option" -[ -z "$LOCALDB" ] && usage "Missing -d option" -[ -n "$REMOTEDATAONLY" -a -n "$REMOTESCHEMAONLY" ] && usage "Either -A or -S may be specified, but not both" - -PGPASSWORD="$REMOTEPASSWORD" pg_dump -C $REMOTEDATAONLY $REMOTESCHEMAONLY -h $REMOTEHOST -U $REMOTEUSER $REMOTEDB | -PGPASSWORD="$LOCALPASSWORD" psql -h $LOCALHOST -U $LOCALUSER $LOCALDB diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_promote b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_promote deleted file mode 100755 index c976afa..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_promote +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -pg_ctl promote -D /dbroot/pgdata/main/ diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_restart b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_restart deleted file mode 100755 index 6929d60..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_restart +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/postgresql.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find PostgreSQL configuration" 1>&2; exit 1 -fi - -pg_ctl stop -D /dbroot/pgdata/main/ -echo Restarting in 5 -sleep 1 -echo Restarting in 4 -sleep 1 -echo Restarting in 3 -sleep 1 -echo Restarting in 2 -sleep 1 -echo Restarting in 1 -sleep 1 -pg_ctl start -D /dbroot/pgdata/main/ -o "-c config_file=$CONF" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_start b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_start deleted file mode 100755 index 42117df..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_start +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/postgresql.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find PostgreSQL configuration" 1>&2; exit 1 -fi - -pg_ctl start -D /dbroot/pgdata/main/ -o "-c config_file=$CONF" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_status b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_status deleted file mode 100755 index 3383835..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_status +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -pg_ctl status -D /dbroot/pgdata/main/ diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_stop b/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_stop deleted file mode 100755 index b6c3563..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pg_ctl_stop +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -pg_ctl stop -D /dbroot/pgdata/main/ diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pgaas-verify-install b/pgaas/src/stage/opt/app/pgaas/bin/pgaas-verify-install deleted file mode 100644 index 607c8a7..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pgaas-verify-install +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -die() -{ - exec 1>&2 - echo "$@" - logger --stderr --priority local1.error --tag "DCAE" "$@" - exit 1 -} - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - b=$(basename $0) - echo "Usage: $b [-v]" - echo "$b runs a variety of tests on the PG VM and database" - echo "It should be run as root or postgres." - echo "If run as root, it will do additional tests that are" - echo "not possible as a normal user. If not run as root or" - echo "postgres, other tests may fail." - echo " -v verbose" - echo " -P do not print VERIFIED" - exit 1 -} - -PRINTVERIFIED=: -while getopts Pv c -do - case $c in - P ) PRINTVERIFIED=false ;; - v ) set -x ;; - '?' ) usage ;; - esac -done -shift `expr $OPTIND - 1` - -# this can be run as root -ROOT=false -case `id` in - *"(root)"* ) ROOT=true ;; - *"(postgres)"* ) ;; - * ) echo "$0 should be run as either root or postgres" ;; -esac - -VERIFIEDCOUNT=0 -FAILEDCOUNT=0 -TOTALCOUNT=0 - -verified() -{ - (( VERIFIEDCOUNT = VERIFIEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - $PRINTVERIFIED && echo "VERIFIED: $@" -} - -failed() -{ - (( FAILEDCOUNT = FAILEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - echo "FAILED: $@" -} - -tabtext() -{ - echo "$@" | sed 's/^/ /' -} - -HOSTNAME=$(hostname -f) - -################################################################ -################ things set up by ################ -################ openstack ################ -################################################################ - -case $HOSTNAME in - *.*.* ) verified "hostname has a FQDN" ;; - * ) failed "hostname does not have a FQDN" ;; -esac - -################################################################ -################ things set up by ################ -################ controller dcae_install ################ -################################################################ - -#### user dcae is no longer used -#### if grep '^dcae:' /etc/passwd > /dev/null -#### then verified "dcae user exists" -#### else failed "dcae user does not exist" -#### fi -#### if $ROOT -#### then -#### if [ -s /etc/sudoers.d/dcae-postgres ] -#### then verified "dcae can sudo to postgres" -#### else failed "dcae cannot sudo to postgres" -#### fi -#### fi - -SHOWDF=false -SHOWMOUNT=false -for i in /opt/tools /opt/logs /dbroot/pgdata /dbroot/pglogs /dbroot/pgbackup -do - if df -h 2>&1 | grep " $i"'$' > /dev/null - then verified "$i has its own filesystem" - else failed "$i does not have its own filesystem"; SHOWDF=true - fi - - if mount | grep "^$i " | grep rw > /dev/null - then verified "$i is on a read-write filesystem" - else failed "$i is not on a read-write filesystem"; SHOWMOUNT=true - fi -done -$SHOWDF && tabtext "$(df -h 2>&1)" -$SHOWMOUNT && tabtext "$(mount 2>&1)" - -if grep '^postgres:' /etc/passwd > /dev/null -then verified "postgres user exists" -else failed "postgres user does not exist" -fi - -################################################################ -################ things set up by ################ -################ cdf package ################ -################################################################ - -if [ -d /opt/app/cdf ] -then verified "/opt/app/cdf is present" -else failed "/opt/app/cdf is present" -fi - -cdfcall=$(/opt/app/cdf/bin/getpropvalue -n foo 2>&1) -case "$cdfcall" in - *Configuration?property*must?be?defined* ) verified "CDF is installed and working" ;; - * ) failed "CDF is not installed and working"; tabtext "$cdfcall" ;; -esac - -################################################################ -################ things set up by ################ -################ pgaas-prep step ################ -################################################################ - -if grep "^pgnodes=.*$HOSTNAME" /opt/app/cdf/lib/cdf.cfg > /dev/null -then verified "HOSTNAME is part of cluster (cdf.cfg pgnodes)" -else failed "HOSTNAME is not part of cluster (cdf.cfg pgnodes)" -fi - -# check for certificate presence goes here - -if [ -s /lib/systemd/system/pgaas-idns.service ] -then verified "found pgaas-idns service properly installed for Ubuntu 16" -elif [ -s /etc/init/pgaas-idns.conf ] -then verified "found pgaas-idns service properly installed for Ubuntu 14" -else failed "pgaas-idns service has not been installed properly" -fi - -if ps -ef | grep '[i]DNS-responder' > /dev/null -then verified "iDNS-responder is running" - if ps -fu postgres | grep '[i]DNS-responder' > /dev/null - then verified "iDNS-responder is running as postgres" - else failed "iDNS-responder is running, but not as postgres" - fi -else failed "postgres does not have a logger process running" -fi - -if [ -d /var/run/postgresql ] -then verified "/var/run/postgresql exists" -else failed "/var/run/postgresql does not exist" -fi - -if [ -s /etc/logrotate.d/pgaas ] -then verified "/etc/logrotate.d/pgaas has been installed" -else failed "/etc/logrotate.d/pgaas has not been installed" -fi - - -################################################################ -################ things set up by ################ -################ pgaas-config step ################ -################################################################ - -if ps -fu postgres | grep "[p]ostgres: logger process" > /dev/null -then verified "postgres is running" -else failed "postgres does not have a logger process running" -fi - -if pgrep repmgrd > /dev/null -then verified "repmgrd is running" -else failed "repmgrd is not running" -fi - -if [ -f /opt/app/pgaas/bin/runpsqll ] -then - verified "/opt/app/pgaas/bin/runpsqll is installed" - roles=$( /opt/app/pgaas/bin/runpsqll "select rolname from pg_roles" ) - case "$roles" in - *repmgr* ) verified "postgres repmgr role name is present" ;; - * ) failed "postgres repmgr role name was not added"; tabtext "$roles" ;; - esac - rolcount=$( /opt/app/pgaas/bin/runpsqll "select count(rolname) from pg_roles" | awk 'NF > 0 {print $1}' ) - case $rolcount in - 1 | 2 ) failed "no additional postgresql role names have been added"; tabtext "$roles" ;; - * ) verified "additional postgresql role names have been added" ;; - esac - dxpgtemporal=$( /opt/app/pgaas/bin/runpsqll "select count(extname) from pg_extension where extname = 'temporal_tables'" | awk 'NF > 0 {print $1}' ) - case $dxpgtemporal in - 1 ) verified "temporal_tables extension has been added" ;; - * ) failed "temporal_tables extension has not been added" ;; - esac -else - failed "/opt/app/pgaas/bin/runpsqll is not installed" -fi - -if [ -f /opt/app/pgaas/bin/check_cluster ] -then - verified "/opt/app/pgaas/bin/check_cluster is installed" - ckcl=$( /opt/app/pgaas/bin/check_cluster 2>&1 ) - case $ckcl in - *No?such?file?or?directory* ) failed "check_cluster not found"; tabtext "$ckcl" ;; - *ERROR* ) failed "check_cluster returned error:"; tabtext "$ckcl" ;; - *WARNING* ) failed "check_cluster returned a warning:"; tabtext "$ckcl" ;; - * ) verified "check_cluster succeeded" ;; - esac -else - failed "/opt/app/pgaas/bin/check_cluster is not installed" -fi - -echo "$VERIFIEDCOUNT tests passed, $FAILEDCOUNT tests failed, $TOTALCOUNT total tests run" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/pgwget b/pgaas/src/stage/opt/app/pgaas/bin/pgwget deleted file mode 100644 index d1d5f98..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/pgwget +++ /dev/null @@ -1,4 +0,0 @@ -# this command is used to access the iDNS status server running on a PGaaS instance - -wgetpswd=`/opt/app/cdf/bin/getpropvalue -x -n wgetpswd` -wget --http-user=pgaas --http-password=$wgetpswd "$@" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/repmgrc b/pgaas/src/stage/opt/app/pgaas/bin/repmgrc deleted file mode 100644 index 8ce6ebf..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/repmgrc +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/repmgr.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find repmgr configuration" 1>&2; exit 1 -fi - -repmgr -f $CONF "$@" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/repmgrd-status-changes b/pgaas/src/stage/opt/app/pgaas/bin/repmgrd-status-changes deleted file mode 100644 index a735db5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/repmgrd-status-changes +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# %n - node ID -# %e - event type -# %s - success (1 or 0) -# %t - timestamp -# %d - details - -nodeID="$1" -eventType="$2" -success="$3" -timestamp="$4" -details="$5" - -LOG=/opt/logs/dcae/postgresql/server/repmgrstatus.log -PROMOTIONLOG=/var/run/postgresql/repmgr-promotion -echo `date` "$@" >> $LOG - -# The following event types are available: -# master_register -# standby_register -# standby_unregister -# standby_clone -# standby_promote -# standby_follow -# standby_switchover -# standby_disconnect_manual -# witness_create -# witness_register -# witness_unregister -# repmgrd_start -# repmgrd_shutdown -# repmgrd_failover_promote -# repmgrd_failover_follow - -case "$eventType" in - standby_promote ) - if [ "$success" -eq 1 ] - then echo $(date +%Y%m%d%H%M%S) "$@" >> $PROMOTIONLOG - fi -esac diff --git a/pgaas/src/stage/opt/app/pgaas/bin/repmgrdc b/pgaas/src/stage/opt/app/pgaas/bin/repmgrdc deleted file mode 100644 index 2831ed0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/repmgrdc +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin - -CONF=/opt/app/pgaas/main/repmgr.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find repmgr configuration" 1>&2; exit 1 -fi - -repmgrd -f $CONF "$@" diff --git a/pgaas/src/stage/opt/app/pgaas/bin/runpsql b/pgaas/src/stage/opt/app/pgaas/bin/runpsql deleted file mode 100755 index fcb1196..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/runpsql +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -[ -z "$PGUSER" ] && PGUSER=postgres -[ -z "$PGHOST" ] && PGHOST=`hostname -f` -[ -z "$PGDBNM" ] && PGDBNM=postgres -echo "$@;" | -psql --host=$PGHOST --username=$PGUSER --dbname=$PGDBNM - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/runpsqll b/pgaas/src/stage/opt/app/pgaas/bin/runpsqll deleted file mode 100755 index 864fbf8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/runpsqll +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -[ -z "$PGUSER" ] && PGUSER=postgres -[ -z "$PGHOST" ] && PGHOST=`hostname -f` -[ -z "$PGDBNM" ] && PGDBNM=postgres -echo "$@;" | -psql --tuples-only --host=$PGHOST --username=$PGUSER --dbname=$PGDBNM - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/setpropvalue b/pgaas/src/stage/opt/app/pgaas/bin/setpropvalue deleted file mode 100755 index 2b45fa8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/setpropvalue +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -die() -{ - exec 1>&2 - echo "$@" - exit 1 -} - -usage() -{ - exec 1>&2 - [ $# -gt 0 ] && echo "$@" - echo "Usage: $0 -n name -v value [-x]" - echo " -n\tname to configure" - echo " -v\tvalue to set" - echo " -x\tencrypt the value" - exit 1 -} - -NAME= -VAL= -ENCRYPT=false -FILE=/opt/app/pgaas/lib/pgaas.cfg - -while getopts f:n:v:x c -do - case "$c" in - f ) FILE=$OPTARG ;; - n ) NAME=$OPTARG ;; - v ) VAL=$OPTARG ;; - x ) ENCRYPT=true ;; - \?) usage ;; - esac -done -shift $(($OPTIND - 1)) - -[ -n "$NAME" ] || die "-n name is required" -[ -n "$VAL" ] || die "-v value is required" -[ -f "$FILE" -a -w "$FILE" ] || die "-f file must exist and be writable" - -ed $FILE <<-! - H - g/^$NAME[=]/d - g/^$NAME[.]x=/d - w - q -! - -if $ENCRYPT -then /opt/app/cdf/bin/getpropvalue -e AES -n $NAME -v $VAL >> $FILE -else echo "$NAME='$VAL'" >> $FILE -fi diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_is_in_recovery b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_is_in_recovery deleted file mode 100755 index b26904d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_is_in_recovery +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsqll "select * from pg_is_in_recovery()" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_activity b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_activity deleted file mode 100755 index d9f43c8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_activity +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_activity" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_archiver b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_archiver deleted file mode 100755 index fac0bdb..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_archiver +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_archiver" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_bgwriter b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_bgwriter deleted file mode 100755 index cf6d01a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_bgwriter +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_bgwriter" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database deleted file mode 100755 index c74316e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_database" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database_conflicts b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database_conflicts deleted file mode 100755 index 73d47bd..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_database_conflicts +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_database_conflicts" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_indexes b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_indexes deleted file mode 100755 index 9ff29d9..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_indexes +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_user_indexes" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_tables b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_tables deleted file mode 100755 index 5eb1393..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_stat_user_tables +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_stat_user_tables" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_functions b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_functions deleted file mode 100755 index dfaf570..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_functions +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_functions" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_indexes b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_indexes deleted file mode 100755 index 6ec3043..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_indexes +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_indexes" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_sequences b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_sequences deleted file mode 100755 index 9d658e4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_sequences +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_sequences" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_tables b/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_tables deleted file mode 100755 index 4017988..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/show_pg_statio_user_tables +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -export PATH=/opt/app/pgaas/bin:$PATH - -runpsql "select * from pg_statio_user_tables" - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/start_maintenance_mode b/pgaas/src/stage/opt/app/pgaas/bin/start_maintenance_mode deleted file mode 100644 index 47bb37e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/start_maintenance_mode +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -PATH=/opt/app/pgaas/bin:$PATH - -INMAINTENANCE=/var/run/postgresql/inmaintenance -ISRW=/var/run/postgresql/isrw - -if [ -f $INMAINTENANCE ] -then - echo "Already in maintenance mode" 1>&2 - exit 1 -fi - -case `< $ISRW` in - Master ) echo "This is a Master system. It cannot be set to maintenance mode" 1>&2 - exit 2 - ;; -esac - -echo "Setting maintenance mode" -echo inmaintenance > $INMAINTENANCE - -echo "Shutting down the PostgreSQL server" -pg_ctl_stop - -# the following loop is to allow iDNS to get a chance to mark this system as being down -echo "Sleeping for 20 seconds" -for i in `seq 20` -do - echo -n " $i" -done -echo " Done" - - - - diff --git a/pgaas/src/stage/opt/app/pgaas/bin/startpsql b/pgaas/src/stage/opt/app/pgaas/bin/startpsql deleted file mode 100644 index 9e5c5b4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/startpsql +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -[ -z "$PGUSER" ] && PGUSER=postgres -[ -z "$PGHOST" ] && PGHOST=`hostname -f` -[ -z "$PGDBNM" ] && PGDBNM=postgres - -psql --host=$PGHOST --username=$PGUSER --dbname=$PGDBNM diff --git a/pgaas/src/stage/opt/app/pgaas/bin/stop_maintenance_mode b/pgaas/src/stage/opt/app/pgaas/bin/stop_maintenance_mode deleted file mode 100644 index 5d0b8d1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/stop_maintenance_mode +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -PATH=/opt/app/pgaas/bin:$PATH - -INMAINTENANCE=/var/run/postgresql/inmaintenance - -if [ ! -f $INMAINTENANCE ] -then - echo "Not in maintenance mode" 1>&2 - exit 1 -fi - -echo "Restarting PostgreSQL server" -pg_ctl_start -echo "Returning server to normal rotation" -rm -f $INMAINTENANCE diff --git a/pgaas/src/stage/opt/app/pgaas/bin/update_var_run_isrw b/pgaas/src/stage/opt/app/pgaas/bin/update_var_run_isrw deleted file mode 100755 index 7b51b30..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/update_var_run_isrw +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi - -export PATH=$PATH:$PGDIR/bin:/opt/java/jdk/jdk170/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin - -for i in 1 2 3 4 5 6 -do - isrw > /var/run/postgresql/isrw.tmp 2>&1 && - mv /var/run/postgresql/isrw.tmp /var/run/postgresql/isrw - sleep 10 -done diff --git a/pgaas/src/stage/opt/app/pgaas/bin/verify_pg_privileges b/pgaas/src/stage/opt/app/pgaas/bin/verify_pg_privileges deleted file mode 100755 index 628b63d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/bin/verify_pg_privileges +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -defdbname="test" -defprefix="tst" -dbname="$defdbname" -prefix="$defprefix" - -usage() -{ - exec 1>&2 - [ -n $# ] && echo " $@" - echo "Usage: $0 -A pswd -U pswd -V pswd [-d dbname] [-p prefix] [-P] [-v]" - echo " -d dbname - database name, defaults to '$defdbname'" - echo " -p prefix - prefix of usernames, defaults to '$defprefix'" - echo " -A pswd - password for admin role" - echo " -U pswd - password for user role" - echo " -V pswd - password for viewer role" - echo " -v verbose" - echo " -P do not print VERIFIED" - exit 1 -} - -PRINTVERIFIED=: -VERBOSE=false -PSWDA= -PSWDU= -PSWDV= -while getopts A:d:p:PU:vV: c -do - case $c in - A ) PSWDA="$OPTARG" ;; - d ) dbname="$OPTARG" ;; - p ) prefix="$OPTARG" ;; - P ) PRINTVERIFIED=false ;; - U ) PSWDU="$OPTARG" ;; - v ) VERBOSE=: ;; - V ) PSWDV="$OPTARG" ;; - '?' ) usage ;; - esac -done -shift `expr $OPTIND - 1` - -[ -n "$PSWDA" ] || usage "-A is missing" -[ -n "$PSWDU" ] || usage "-U is missing" -[ -n "$PSWDV" ] || usage "-V is missing" - -admin="${prefix}_admin" -user="${prefix}_user" -viewer="${prefix}_viewer" - -TMP1=$(mktemp /tmp/vpp1.$$.XXXXXXXXXX) -TMP2=$(mktemp /tmp/vpp2.$$.XXXXXXXXXX) -trap 'rm -f $TMP1 $TMP2' 0 1 2 3 15 - -VERIFIEDCOUNT=0 -FAILEDCOUNT=0 -TOTALCOUNT=0 - -verified() -{ - (( VERIFIEDCOUNT = VERIFIEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - $PRINTVERIFIED && echo "VERIFIED: $@" -} - -failed() -{ - (( FAILEDCOUNT = FAILEDCOUNT + 1 )) - (( TOTALCOUNT = TOTALCOUNT + 1 )) - echo "FAILED: $@" -} - -tabtext() -{ - echo "$@" | sed 's/^/ /' -} - -tabfile() -{ - sed 's/^/ /' "$@" -} - -runtests() -{ - name="$1" - pswd="$2" - while read cmd; read expected - do - echo "$cmd" | psql --host=localhost --dbname="$dbname" --username="$name" > $TMP1 2>&1 - if fgrep "$expected" $TMP1 > /dev/null - then verified "user $name executed $cmd, expected $expected" - $VERBOSE && echo -e "\tGot:" && tabfile "$TMP1" - else failed "user $name executed $cmd, expected $expected, got:"; tabfile $TMP1 - fi - done -} - -psql --host=localhost --dbname="$dbname" --username="$admin" <<EOF > /dev/null - drop table if exists foo; - drop table if exists foou; - drop table if exists fooud; - drop table if exists foouc; - drop table if exists foov; - drop table if exists foovd; - drop table if exists foovc; -EOF - -# tests to be run as admin user -cat <<-EOF > $TMP2 - create table foo ( fooint int ); /* table for admin to add and drop */ - CREATE TABLE - insert into foo (fooint) values (1); /* admin can add values */ - INSERT 0 1 - select count(*) from foo; /* admin can select */ - (1 row) - delete from foo where fooint = '1'; /* admin can delete */ - DELETE 1 - select * from foo; /* admin can select */ - (0 rows) - drop table foo; /* admin can drop */ - DROP TABLE - create table foou (fooint int ); /* table for user to add/delete to */ - CREATE TABLE - create table fooud (fooint int ); /* table for user to try dropping */ - CREATE TABLE - create table foov (fooint int ); /* table for viewer to try adding/deleting from */ - CREATE TABLE - create table foovd (fooint int ); /* table for viewer to try dropping */ - CREATE TABLE -EOF -runtests "$admin" "$PWDA" < $TMP2 - -# tests to be run as writer -cat <<-EOF > $TMP2 - create table foouc ( fooint int ); /* user cannot create a table */ - ERROR: - drop table fooud; /* user cannot drop a table */ - ERROR: - insert into foou (fooint) values (1); /* user can add values */ - INSERT 0 1 - select count(*) from foou; /* user can select values */ - (1 row) - insert into foou (fooint) values (2); /* user can add values */ - INSERT 0 1 - select * from foou; /* user can select values */ - (2 rows) - delete from foou where fooint = '2'; /* user can delete values */ - DELETE 1 - select * from foou; /* user can select values */ - (1 row) -EOF -runtests "$user" "$PWDU" < $TMP2 - -# tests to be run as read-only -cat <<-EOF > $TMP2 - create table foovc ( fooint int ); /* user cannot create a table */ - ERROR: - drop table foovd; /* user cannot drop a table */ - ERROR: - insert into foov (fooint) values (1); /* user can add values */ - ERROR: - select count(*) from foov; /* user can select values */ - (1 row) - insert into foov (fooint) values (2); /* user can add values */ - ERROR: - select * from foov; /* user can select values */ - (0 rows) - delete from foov where fooint = '2'; /* user can delete values */ - ERROR: - select * from foov; /* user can select values */ - (0 rows) -EOF -runtests "$viewer" "$PWDV" < $TMP2 - -echo "$VERIFIEDCOUNT tests passed, $FAILEDCOUNT tests failed, $TOTALCOUNT total tests run" diff --git a/pgaas/src/stage/opt/app/pgaas/etc/common-db-tasks b/pgaas/src/stage/opt/app/pgaas/etc/common-db-tasks deleted file mode 100644 index 517fabd..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/common-db-tasks +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -# set up ~/.pgpass -$CFGDIR/etc/gen-pgpass -# set up repmgr.conf -$CFGDIR/etc/gen-repmgr.conf - -# We don't really need to save pwd.cfg anymore since we are now forcing the password. -# PWDCFG=$DBROOT/../pgaas/pwd.cfg -# egrep '^Global_Title|^postgres|^repmgr' ${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg > $PWDCFG - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -sed -e "s!%CFGDIR%!$CFGDIR!" < postgresql.conf.orig > postgresql.conf || die "Cannot cp postgresql.conf" -sed -e "s!%CFGDIR%!$CFGDIR!" < pg_hba.conf.orig > pg_hba.conf || die "Cannot cp pg_hba.conf" - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-master b/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-master deleted file mode 100644 index dcbbf46..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-master +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -DBROOT=/dbroot/pgdata/main -CDFCFG=${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg - -# We don't really need to save pwd.cfg anymore since we are now forcing the password. -# PWDCFG=$DBROOT/../pgaas/pwd.cfg -# if the DB already exists in Cinder storage, grab the password from there for use elsewhere -# if [ -s $PWDCFG -a $( egrep '^Global_Title' < $PWDCFG ) -eq 1 ] -# then -# TMP=$(mktemp /tmp/tmp.ccm.XXXXXXXXXX) -# trap 'rm -f $TMP' 0 1 2 3 15 -# egrep -v '^Global_Title|^postgres|^repmgr' $CDFCFG > $TMP -# egrep '^Global_Title|^postgres|^repmgr' $PWDCFG | cat $TMP - > $CDFCFG -# fi - -# generate a 64 hex random value (256 bits of randomness) for the passwords -if grep '^postgres' $CDFCFG > /dev/null -then : -else - val2= - # if .pgpass has a password for postgres, keep it - # *:*:*:postgres:4069b81b26cb01e064e242611c36e67a50f11a3d0dbe1f05d9b9aaedf2cadab1 - PGPASS=~postgres/.pgpass - if [ -f $PGPASS ] - then val2=$( grep :postgres: $PGPASS | sed 's/^.*://' ) - fi - if [ -z "$val2" ] - then - val2=$(dd if=/dev/urandom count=1 ibs=32 2>/dev/null | od -x -w1000 | sed -e 's/^0000000 //' -e 's/ //g' -e 1q) - fi - echo "ENCRYPTME.AES.postgres=$val2" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues >> $CDFCFG -fi -if grep '^repmgr' $CDFCFG > /dev/null -then : -else - val2=$(dd if=/dev/urandom count=1 ibs=32 2>/dev/null | od -x -w1000 | sed -e 's/^0000000 //' -e 's/ //g' -e 1q) - echo "ENCRYPTME.AES.repmgr=$val2" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues >> $CDFCFG -fi diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-secondary b/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-secondary deleted file mode 100644 index 78c35f9..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-cdf-secondary +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$MASTER" ] || die "MASTER is not set" - -umask 077 -TMP=$( mktemp /tmp/tmp.ccs1.XXXXXXXXXX ) -trap 'rm -f $TMP' 0 1 2 3 15 - -bwget() -{ - ${INSTALL_ROOT}/opt/app/pgaas/bin/pgwget --progress=dot:giga "$@" -} - -done= -max=40 -for s in `seq $max` -do - echo "$s of $max: Waiting for master $MASTER to send cdf.cfg" - bwget -O$TMP http://$MASTER:8000/getcdf/`hostname -f` - ls -l $TMP - if [ -s $TMP ] - then - msg=$(cat $TMP) - case "$msg" in - OK* ) - echo "Received cdf.cfg" - done=yes - break - ;; - * ) echo "Received invalid cdf: $msg" - ;; - esac - fi - rm -f $TMP - sleep 15 -done -[ "$done" = "yes" ] || die "Master did not send cdf.cfg" - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-db-backup b/pgaas/src/stage/opt/app/pgaas/etc/create-db-backup deleted file mode 100644 index d6e856b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-db-backup +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found -fi - -$PGDIR/bin/psql <<-EOF - SELECT pg_start_backup('backup'); -EOF - -cd /dbroot/pgdata && -{ - find main | grep -v main/pg_xlog/ - find main/pg_xlog -type d -} | cpio -oc | gzip > main.cpio.gz.$$ && mv main.cpio.gz.$$ main.cpio.gz - -$PGDIR/bin/psql <<-EOF - SELECT pg_stop_backup(); -EOF -echo /dbroot/pgdata/main.cpio.gz created diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-db-master b/pgaas/src/stage/opt/app/pgaas/etc/create-db-master deleted file mode 100644 index eb8fca3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-db-master +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# create a master database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -umask 077 -TMP=$(mktemp /tmp/tmp.cdm.XXXXXXXXXX) -trap 'rm -f $TMP' 0 1 2 3 15 - -rm -rf $DBROOT/* # initdb fails if the directory is not totally empty -pswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n postgres ) -echo "$pswd" > $TMP -$PGDIR/bin/initdb -D $DBROOT --pwfile=$TMP -rm -f $TMP - -$CFGDIR/etc/start-db -sleep 30 - -# create temporal tables and other extensions, if needed -$CFGDIR/etc/create-extensions - -# create repmgr user/db, if needed -$CFGDIR/etc/create-repmgr-user - -sleep 10 - -# register as master -repmgr -f $CFGDIR/main/repmgr.conf master register -echo repmgr ret=$? - -sleep 10 - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 -repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose -echo repmgrd ret=$? -# start repmgrd (normal logging) -# repmgrd -f $CFGDIR/main/repmgr.conf -d - - -# NO LONGER NEEDED $CFGDIR/etc/create-db-backup diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-db-secondary b/pgaas/src/stage/opt/app/pgaas/etc/create-db-secondary deleted file mode 100644 index a0cc8e3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-db-secondary +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# create a secondary database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$MASTER" ] || die "MASTER is not set" -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -bwget() -{ - ${INSTALL_ROOT}/opt/app/pgaas/bin/pgwget --progress=dot:giga "$@" -} - -umask 077 -TMP=$(mktemp /tmp/tmp.cds1.XXXXXXXXXX) -TMP2=$(mktemp /tmp/tmp.cds2.XXXXXXXXXX) -trap 'rm -f $TMP $TMP2' 0 1 2 3 15 - -# wait until master DB is active and has repmgr available -max=40 -for s in `seq $max` -do - echo "$s of $max: Asking master $MASTER if repmgr is ready" - bwget -O$TMP http://$MASTER:8000/hasrepmgr - ls -l $TMP - if [ -s $TMP ] - then - msg=$(cat $TMP) - case $msg in - OK* ) - echo "Master has repmgr ready" - done=yes - break - ;; - * ) - echo "Master does not have repmgr ready, msg=$msg" - ;; - esac - fi - rm -f $TMP - sleep 15 -done -[ "$done" = "yes" ] || die "Master never had repmgr available" - - -# clone database from master - -# make sure /dbroot/pgdata/main is empty -mv $DBROOT $DBROOT-$(date +%Y%m%d%H%M%S) -mkdir -p $DBROOT -# rm -rf $DBROOT/* - -repmgr -v -h $MASTER -U repmgr -d repmgr -D $DBROOT -f $CFGDIR/main/repmgr.conf --ignore-external-config-files standby clone - -if [ ! -f $DBROOT/PG_VERSION ] -then - umask 022 - cat /opt/logs/dcae/postgresql/server/repmgr.log >> /tmp/pgaas-failures - die repmgr clone failed -fi - -$CFGDIR/etc/start-db - -sleep 10 - -# register as standby -repmgr -f $CFGDIR/main/repmgr.conf standby register -echo repmgr ret=$? -sleep 10 - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 - -# wait until repmgrd starts up -max=20 -REPLOG=/opt/logs/dcae/postgresql/server/repmgr.log -done=no -for s in `seq $max` -do - cat $REPLOG > $TMP - repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose - # start repmgrd (normal logging) - # repmgrd -f $CFGDIR/main/repmgr.conf -d - echo repmgrd ret=$? - sleep 5 - diff $TMP $REPLOG | grep "ERROR.*terminating" > $TMP2 - if [ -s "$TMP2" ] - then cat "$TMP2" - else done=yes; break - fi - sleep 10 -done -[ "$done" = "yes" ] || die "Secondary never started repmgrd" diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-extensions b/pgaas/src/stage/opt/app/pgaas/etc/create-extensions deleted file mode 100644 index 70306a6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-extensions +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PGDIR/bin:$PATH - -TMP=$(mktemp /tmp/tmp.ce.XXXXXXXXXX) -trap 'rm -f $TMP' 0 1 2 3 15 - -echo "select datname from pg_database;" | psql --tuples-only | sed -e 's/^ *//' -e '/^$/d' -e '/^template0$/d' -e '/^repmgr$/d' > $TMP - -for db in $(< $TMP) -do - # enable temporal tables for use - if [ -f /opt/app/postgresql-9.5.2/lib/temporal_tables.so ] - then - psql --dbname=$db <<-EOF - CREATE EXTENSION temporal_tables; - EOF - else - echo "$0: temporal_tables extension is not installed" - fi - - # and other extensions - psql --dbname=$db <<-EOF - CREATE EXTENSION hstore; - CREATE EXTENSION pgcrypto; - EOF -done diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-repmgr-user b/pgaas/src/stage/opt/app/pgaas/etc/create-repmgr-user deleted file mode 100644 index 35ca401..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-repmgr-user +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PGDIR/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH -pswd=$( getpropvalue -x -n repmgr ) - -# note: The "pgaas" in "repmgr_pgaas" must match the cluster name used in repmgr.conf - -psql <<-EOF - CREATE ROLE repmgr SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN; - DROP DATABASE repmgr; - CREATE DATABASE repmgr OWNER repmgr; - ALTER USER repmgr PASSWORD '$pswd'; - ALTER USER repmgr SET search_path TO repmgr_pgaas, "\$user", public; -EOF diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-master b/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-master deleted file mode 100644 index 5565041..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-master +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -umask 077 -mkdir -p ~postgres/.ssh -chmod 700 ~postgres/.ssh - -PGAASDIR=/dbroot/pgdata/pgaas -if [ -f $PGAASDIR/id_rsa.pub -a -f $PGAASDIR/id_rsa -a $PGAASDIR/authorized_keys ] -then - cp -p $PGAASDIR/id_rsa.pub $PGAASDIR/id_rsa $PGAASDIR/authorized_keys ~postgres/.ssh -else - ssh-keygen -t rsa -N '' -f ~postgres/.ssh/id_rsa - cp -p ~postgres/.ssh/id_rsa.pub ~postgres/.ssh/authorized_keys - cp -p ~postgres/.ssh/id_rsa ~postgres/.ssh/id_rsa.pub ~postgres/.ssh/authorized_keys $PGAASDIR -fi - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-secondary b/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-secondary deleted file mode 100644 index 2121eb3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create-ssh-secondary +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -bwget() -{ - ${INSTALL_ROOT}/opt/app/pgaas/bin/pgwget --progress=dot:giga "$@" -} - -[ -n "$MASTER" ] || die "MASTER is not set" - - - -umask 077 -TMP=$(mktemp /tmp/tmp.css1.XXXXXXXXXX) -TMP2=$(mktemp /tmp/tmp.css2.XXXXXXXXXX) -trap 'rm -f $TMP $TMP2' 0 1 2 3 15 - -# do we have the keys already? -if [ -f $PGAASDIR/id_rsa.pub -a -f $PGAASDIR/id_rsa -a $PGAASDIR/authorized_keys ] -then - mkdir -p ~postgres/.ssh - chmod 700 ~postgres/.ssh - cp -p $PGAASDIR/id_rsa.pub $PGAASDIR/id_rsa $PGAASDIR/authorized_keys ~postgres/.ssh -else - # no? copy them from the master - done= - max=40 - for s in `seq $max` - do - echo "$s of $max: Waiting for master $MASTER to come online and send its public key" - bwget -O$TMP http://$MASTER:8000/getpubkey - ls -l $TMP - if [ -s $TMP ] - then - msg=$(cat $TMP) - case "$msg" in - ssh-rsa* ) - echo "Received public key" - mkdir -p ~postgres/.ssh - chmod 700 ~postgres/.ssh - cp -p $TMP ~postgres/.ssh/authorized_keys - done=yes - break - ;; - * ) echo "Received invalid public key: $msg" - ;; - esac - else - echo "No key available yet" - fi - rm -f $TMP - sleep 15 - done - [ "$done" = "yes" ] || die "Unable to get key from $MASTER" - - done= - max=40 - for s in `seq $max` - do - echo "$s of $max: Asking for master $MASTER to send remaining ssh files" - bwget -O$TMP2 http://$MASTER:8000/getssh/`hostname -f` - ls -l $TMP2 - if [ -s $TMP2 ] - then - msg=$(cat $TMP2) - case "$msg" in - OK* ) echo "Master has sent the remaining ssh keys" - done=yes - break - ;; - * ) echo "No ssh keys yet: $msg" - ;; - esac - fi - rm -f $TMP2 - sleep 15 - done - [ "$done" = "yes" ] || die "Master did not send ssh keys" -fi diff --git a/pgaas/src/stage/opt/app/pgaas/etc/create_dcae_rotate.sql b/pgaas/src/stage/opt/app/pgaas/etc/create_dcae_rotate.sql deleted file mode 100644 index 2200362..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/create_dcae_rotate.sql +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ -create table dcae_rotate ( - basetablename varchar(129) not null, /* the base table name to derive other tables from */ - columnname varchar(64) not null, /* which column name to use as the datestamp */ - count int, /* how many periods to keep around */ - period varchar(20) /* one of 'week', 'month' or 'day' */ -); diff --git a/pgaas/src/stage/opt/app/pgaas/etc/dcae_admin_db.cfg b/pgaas/src/stage/opt/app/pgaas/etc/dcae_admin_db.cfg deleted file mode 100644 index 139597f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/dcae_admin_db.cfg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-config b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-config deleted file mode 100644 index 87689ef..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-config +++ /dev/null @@ -1,157 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$CFGDIR" ] || die "CFGDIR is not set" -[ -n "$ONAP" ] || die "ONAP is not set" -[ -n "$NOTONAP" ] || die "NOTONAP is not set" - -if [ -d ${INSTALL_ROOT}/opt/app/postgresql-9.5.2 ] -then PGDIR=${INSTALL_ROOT}/opt/app/postgresql-9.5.2 -elif [ -d ${INSTALL_ROOT}/usr/lib/postgresql/9.6 ] -then PGDIR=${INSTALL_ROOT}/usr/lib/postgresql/9.6 -elif [ -d ${INSTALL_ROOT}/usr/lib/postgresql/9.5 ] -then PGDIR=${INSTALL_ROOT}/usr/lib/postgresql/9.5 -else die PostgreSQL bin directory not found -fi -export PGDIR -export DBROOT=/dbroot/pgdata/main -export PATH=$PATH:${INSTALL_ROOT}/opt/app/pgaas/bin - -$CFGDIR/etc/makecerts - -cat $CFGDIR/lib/profile.additions >> ~postgres/.profile - -# Determine which system is the master. -# For central, we look first in /var/config/DCAE/chef/*-postgres.conf. -# If we don't find that, we look at the pgnodes list and pick the first one. -# For edge, we ignore /var/config/DCAE/chef/*-postgres.conf and go directly to the pgnodes list. -# Each edge site has its own master. -clustertype=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n cluster ) -ismaster=no - -case $clustertype in - central ) - CONFDIR1=/var/config/DCAE/chef - CONFDIR2=/tmp - CONFCOUNT1=$(ls $CONFDIR1/*-postgres.conf 2>/dev/null | wc -l) - CONFCOUNT2=$(ls $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) - CONFCOUNTBOTH=$(ls $CONFDIR1/*-postgres.conf $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) - - if [ $CONFCOUNTBOTH -eq 0 ] - then - # not OpenDCAE/ONAP, but it's better if we STILL require a pgaas-postgres.conf file. - die "No xyz-postgres.conf files were found in $CONFDIR1 or $CONFDIR2" - # Alternatively, the following code MIGHT work: - # ismaster=yes - # PGNODES=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n pgnodes ) - # export MASTER=$( gen-repmgr-info -n "$PGNODES" -m ) - else - if [ $CONFCOUNT1 -eq 1 ] - then CONFDIR=$CONFDIR1 - elif [ $CONFCOUNT2 -eq 1 ] - then CONFDIR=$CONFDIR2 - else CONFDIR= - fi - if [ -n "$CONFDIR" ] - then # OpenDCAE/ONAP - # We need the value of master from xyz-postgres.conf - umask 077 - TMP=$(mktemp /tmp/tmp.pi1.XXXXXXXXXX) - trap 'rm -f $TMP' 0 1 2 3 15 - cat $CONFDIR/*-postgres.conf | - sed -e 's/ *: */="/' -e 's/[ ]*$/"/' -e 's/=""/="/' -e 's/""$/"/' > $TMP - . $TMP - case "$master" in - `hostname` | `hostname -f` ) ismaster=yes ;; - *?* ) ismaster=no ;; - '' ) die "master is not set in $CONF" ;; - esac - PGNODES=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n pgnodes ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -M "$master" ) - [ -n "$MASTER" ] || die "Cannot determine master system. $CONF has '$master' (from env.yaml), which cannot be found in pgnodes." - else - if [ $CONFCOUNT1 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR1: $(ls $CONFDIR1/*-postgres.conf 2>&1)" - elif [ $CONFCOUNT2 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR2: $(ls $CONFDIR2/*-postgres.conf 2>&1)" - fi - fi - fi - ;; - edge ) - host=$( hostname -f ) - PGNODES=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -n pgnodes ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -C $host ) - case $MASTER in - '' ) die "Cannot determine master system. Does cdf.cfg have pgnodes= in it? Is $host listed as a site?" ;; - DEFAULT ) ismaster=yes MASTER=$host ;; - esac - ;; -esac - -ssh_and_cdf_okay=no - -if pgrep postgres -then pkill postgres -fi - -case $ismaster in - yes ) # master - $CFGDIR/etc/create-ssh-master && - $CFGDIR/etc/create-cdf-master && - ssh_and_cdf_okay=yes - ;; - - no ) # secondary - $CFGDIR/etc/create-ssh-secondary && - $CFGDIR/etc/create-cdf-secondary && - touch $CFGDIR/lib/ignore-database-reconfiguration # prevent dcae_admin_db.py from looking at json DB reconfigurations && - ssh_and_cdf_okay=yes - ;; -esac - -[ "$ssh_and_cdf_okay" = yes ] || die "Could not set up ssh or cdf" - -$CFGDIR/etc/common-db-tasks -# check if we have a database already -if [ ! -s $DBROOT/PG_VERSION ] -then - # need to create it - case $ismaster in - yes ) $CFGDIR/etc/create-db-master ;; - no ) $CFGDIR/etc/create-db-secondary ;; - esac -else - # need to update it - case $ismaster in - yes ) $CFGDIR/etc/update-db-master ;; - no ) - $CFGDIR/etc/create-db-secondary # use repmgr clone even if secondary previously existed - # $CFGDIR/etc/update-db-secondary - ;; - esac -fi diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-post b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-post deleted file mode 100644 index 66eea14..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-post +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -################ nothing needs to be done -BIN=/opt/app/pgaas/bin - -[ -d $BIN ] || die "Cannot find $BIN" - -PATH=$PATH:$BIN - -pgaas-verify-install diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-prep b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-prep deleted file mode 100644 index 02eabef..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-prep +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -umask 022 - -TMP=$( mktemp /tmp/pgprep.$$.XXXXXXXXXX ) -trap 'rm -f $TMP' 0 1 2 3 15 - -if $ONAP -then INSTALL_ROOT= -fi - - -# There needs to be a configuration file passed in, named something like pgaas-postgres.conf -# and stored either in /var/config/DCAE/chef or /tmp. We need at least one, and there cannot -# be more than one within the directory. (If one exists in both /var/config and /tmp, we trust -# the one in /var/config.) -# -# The variable "master" needs to be in xyz-postgres.conf. It should be the hostname or -# hostname -f value of the VM that is the initial PG master. -# In addition, the following values could be in postgres.conf or -# already in the environment: -# DRTR_NODE_KSTOREFILE: /opt/app/dcae-certificate/keystore.jks -# DRTR_NODE_KSTOREPASS: "No Certificate" -# DRTR_NODE_PVTKEYPASS: "No Certificate" -# PG_NODES : uiopmno1qwpstg00.research.example.com|asbczw1vepstg00.dcae.simpledemo.onap.org -# PG_JAVA_HOME : /opt/app/java/jdk/jdk170 -# PG_CLUSTER : global/central | site/edge (pick one) - -CONFDIR1=/var/config/DCAE/chef -CONFDIR2=/tmp -CONFCOUNT1=$(ls $CONFDIR1/*-postgres.conf 2>/dev/null | wc -l) -CONFCOUNT2=$(ls $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) -CONFCOUNTBOTH=$(ls $CONFDIR1/*-postgres.conf $CONFDIR2/*-postgres.conf 2>/dev/null | wc -l) - -if [ $CONFCOUNTBOTH -eq 0 ] -then - die "No xyz-postgres.conf files were found in $CONFDIR1 or $CONFDIR2" -else - if [ $CONFCOUNT1 -eq 1 ] - then CONFDIR=$CONFDIR1 - elif [ $CONFCOUNT2 -eq 1 ] - then CONFDIR=$CONFDIR2 - else CONFDIR= - fi - if [ -n "$CONFDIR" ] - then # OpenDCAE/ONAP - cat $CONFDIR/*-postgres.conf | - sed -e 's/ *: */="/' -e 's/[ ]*$/"/' -e 's/=""/="/' -e 's/""$/"/' > $TMP - . $TMP - else - if [ $CONFCOUNT1 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR1: $(ls $CONFDIR1/*-postgres.conf 2>&1)" - elif [ $CONFCOUNT2 -gt 1 ] - then die "More than one postgres.conf was found in $CONFDIR2: $(ls $CONFDIR2/*-postgres.conf 2>&1)" - fi - fi -fi - -[ -n "$PG_NODES" ] || die "PG_NODES is not set" -[ -n "$PG_CLUSTER" ] || die "PG_CLUSTER is not set" -[ -n "$DRTR_NODE_KSTOREFILE" ] || die "DRTR_NODE_KSTOREFILE is not set" -[ -n "$DRTR_NODE_KSTOREPASS" ] || die "DRTR_NODE_KSTOREPASS is not set" -[ -n "$DRTR_NODE_PVTKEYPASS" ] || die "DRTR_NODE_PVTKEYPASS is not set" - -# create various directories with proper permissions -mkdir -p ${INSTALL_ROOT}/dbroot/pgdata/main \ - ${INSTALL_ROOT}/dbroot/pgdata/pgaas \ - ${INSTALL_ROOT}/dbroot/pglogs/main \ - ${INSTALL_ROOT}/var/run/postgresql \ - ${INSTALL_ROOT}/opt/logs/dcae/postgresql/init \ - ${INSTALL_ROOT}/opt/logs/dcae/postgresql/server \ - ${INSTALL_ROOT}/opt/logs/dcae/postgresql/idns -chmod 700 ${INSTALL_ROOT}/dbroot/pgdata/pgaas -chmod 700 ${INSTALL_ROOT}/dbroot/pglogs -chmod 700 ${INSTALL_ROOT}/dbroot/pgdata/main - -if $ONAP -then - if [ -d /var/lib/postgresql/9.5 ] - then VER=9.5 - elif [ -d /var/lib/postgresql/9.6 ] - then VER=9.6 - else die "Cannot determine version of PostgreSQL. Looking for /var/lib/postgresql/9.[56]." - fi - mv /var/lib/postgresql/$VER/main /var/lib/postgresql/$VER/main.sv - ln -s /dbroot/dbdata/main /var/lib/postgresql/$VER/main - - mv /etc/postgresql/$VER/main /etc/postgresql/$VER/main.sv - ln -s /opt/app/pgaas/main /etc/postgresql/$VER/main - -fi - -chown -R postgres:postgres ${INSTALL_ROOT}/dbroot ${INSTALL_ROOT}/var/run/postgresql ${INSTALL_ROOT}/opt/logs/dcae/postgresql - -chmod 711 ~postgres -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found 1>&2; exit 1 -fi -chmod 751 $PGDIR/bin - -# fix up the CDF package so that it works -if [ ! -L /opt/cdf ] -then rm -f /opt/cdf; ln -sf /opt/app/cdf /opt/cdf -fi - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PATH - -# and save some values within -( - echo "allpgnodes=\"$PG_NODES\"" - case "$PG_CLUSTER" in - global | central ) - cnodes=$( gen-repmgr-info -n "$PG_NODES" -p ) - echo "pgnodes=\"$cnodes\"" - echo "cluster=central" - shanodes=$( gen-repmgr-info -n "$PG_NODES" -P ) - ;; - site | edge ) - HOSTNAME=$( hostname -f ) - lnodes=$( gen-repmgr-info -n "$PG_NODES" -e $HOSTNAME ) - echo "pgnodes=\"$lnodes\"" - if [ -z "$lnodes" ] - then die "Cannot determine the name of the system. hostname -f ($HOSTNAME) is not found in PG_NODES ($PG_NODES)" - fi - shanodes=$( gen-repmgr-info -n "$PG_NODES" -E $HOSTNAME ) - echo "cluster=edge" - ;; - * ) die "Cannot determine what type of cluster this is. PG_CLUSTER should be either 'global/central' or 'site/edge'" ;; - esac - - echo "drtr_node_kstorefile=$DRTR_NODE_KSTOREFILE" - echo "ENCRYPTME.AES.drtr_node_kstorepass='$DRTR_NODE_KSTOREPASS'" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues - echo "ENCRYPTME.AES.drtr_node_pvtkeypass='$DRTR_NODE_PVTKEYPASS'" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues - echo "ENCRYPTME.AES.wgetpswd=$shanodes" | ${INSTALL_ROOT}/opt/app/cdf/bin/setencryptedvalues -) >> ${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg - -# install the init scripts for postgresql -# init.d-pgaas init-pgaas-idns.conf init-pgaas-init.conf logrotate - -INIT=${INSTALL_ROOT}/opt/app/pgaas/init - -# take care of cron jobs -if [ -d ${INSTALL_ROOT}/opt/app/platform/cron ] -then - CRONDIR=${INSTALL_ROOT}/opt/app/platform/cron/postgres - mkdir -p $CRONDIR - chown postgres:postgres $CRONDIR - chmod 755 $CRONDIR - cp $INIT/pglogs.cron $CRONDIR/pglogs.cron - su postgres -c "sh -x ${INSTALL_ROOT}/opt/app/platform/bin/mergeCron" -else - su postgres -c "crontab $INIT/pglogs.cron" -fi - -# take care of PGaaS init job -if [ -d ${INSTALL_ROOT}/opt/app/platform/init.d ] -then - INITDEST=${INSTALL_ROOT}/opt/app/platform/init.d/pgaas - cp $INIT/init.d-pgaas $INITDEST - chown postgres:postgres $INITDEST - chmod 755 $INITDEST -else - cd ${INSTALL_ROOT}/opt/app/platform/rc.d - ln -sf ../init.d/pgaas K20pgaas - ln -sf ../init.d/pgaas S20pgaas -fi - -# take care of /var/run/postgresql directory -if [ -f /usr/lib/tmpfiles.d/postgresql.conf ] -then - : # no need to create the /var/run/postgresql directory (probably because postgresql package already did it) -elif [ -d /usr/lib/tmpfiles.d ] -then - ( - echo "# Directory for PostgreSQL sockets, lockfiles and stats tempfiles" - echo "d /var/run/postgresql 2775 postgres postgres - -" - ) > /usr/lib/tmpfiles.d/postgresql.conf -else - # install an init script to create it - cp $INIT/init-pgaas-init.conf ${INSTALL_ROOT}/etc/init/pgaas-init.conf - service pgaas-init stop - sleep 1 - service pgaas-init start - sleep 1 -fi -# double check to make sure it's been created -if [ ! -d /var/run/postgresql ] -then - mkdir -p /var/run/postgresql - chown postgres:postgres /var/run/postgresql -fi - -# take care of iDNS-responder -if [ -d /lib/systemd/system -a -f /bin/systemctl ] -then - # install the init script for iDNS in systemd - cp $INIT/systemd-pgaas-idns.service /lib/systemd/system/pgaas-idns.service -# if [ -f /usr/sbin/service ] -# then -# service pgaas-idns stop -# sleep 1 -# service pgaas-idns start -# else -# systemctl stop pgaas-idns - sleep 1 - systemctl daemon-reload - sleep 1 - systemctl enable pgaas-idns - sleep 1 - systemctl start pgaas-idns -# fi - -else - # install the init script for iDNS in upstart - cp $INIT/init-pgaas-idns.conf ${INSTALL_ROOT}/etc/init/pgaas-idns.conf - service pgaas-idns stop - sleep 1 - service pgaas-idns start -fi - -# take care of log rotation -cp $INIT/logrotate ${INSTALL_ROOT}/etc/logrotate.d/pgaas -chown root:root ${INSTALL_ROOT}/etc/logrotate.d/pgaas -chmod 644 ${INSTALL_ROOT}/etc/logrotate.d/pgaas - -chown -R postgres:postgres ${INSTALL_ROOT}/opt/app/pgaas - -echo ENDING $0 $(date) -echo ENDING $0 $(date) >> /tmp/pgaas.inst.report diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-tools b/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-tools deleted file mode 100644 index 16cb5e5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-post-install-tools +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -echo "================ $0 ================" -id -set -x - -die() -{ - echo "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -export CDFCFG=${INSTALL_ROOT}/opt/app/cdf/lib/cdf.cfg -export PGAASCFG=${INSTALL_ROOT}/opt/app/pgaas/lib/pgaas.cfg - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else die PostgreSQL bin directory not found -fi -CFGDIR=/opt/app/pgaas -CONF=$CFGDIR/main/postgresql.conf -if [ ! -f $CONF ] -then echo "$0: Cannot find PostgreSQL configuration" 1>&2; exit 1 -fi - - -( - grep '^postgres.x' < $CDFCFG | sed -e 's/^postgres/dcae_admin_db_password/' - echo "db_configuration=$CONF" - echo "pg_bin_directory=$PGDIR/bin" - echo "skip_configuration_file=$CFGDIR/lib/ignore-database-reconfiguration" -) >> $PGAASCFG diff --git a/pgaas/src/stage/opt/app/pgaas/etc/do-pre-rm.prep b/pgaas/src/stage/opt/app/pgaas/etc/do-pre-rm.prep deleted file mode 100755 index a03a13b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/do-pre-rm.prep +++ /dev/null @@ -1,17 +0,0 @@ -echo STARTING $0 $(date) - -set -x -id - -if [ -d /opt/app/postgresql-9.5.2 ] -then - rm -f $INSTALL_ROOT/opt/app/platform/postgres/pglogs.cron - su postgres -c "$INSTALL_ROOT/opt/app/platform/bin/mergeCron" - rmdir $INSTALL_ROOT/opt/app/platform/postgres - rm -f $INSTALL_ROOT/opt/app/platform/init.d/pgaas - rm -f $INSTALL_ROOT/opt/app/platform/rc.d/K20pgaas - rm -f $INSTALL_ROOT/opt/app/platform/rc.d/S20pgaas -fi - -rm -f $INSTALL_ROOT/etc/init/pgaas-idns.conf $INSTALL_ROOT/etc/init/pgaas-init.conf -rm -f $INSTALL_ROOT/etc/logrotate.d/pgaas diff --git a/pgaas/src/stage/opt/app/pgaas/etc/gen-pgpass b/pgaas/src/stage/opt/app/pgaas/etc/gen-pgpass deleted file mode 100644 index f97d573..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/gen-pgpass +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# create ~postgres/.pgpass -postgrespswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n postgres ) -repmgrpswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n repmgr ) -umask 077 -pswdfile=~postgres/.pgpass -if [ -f $pswdfile ] -then - sed -i -e '/:postgres:/d' -e '/:repmgr:/d' $pswdfile -fi - -echo "*:*:*:postgres:$postgrespswd" >> $pswdfile -echo "*:*:*:repmgr:$repmgrpswd" >> $pswdfile -chmod 600 $pswdfile diff --git a/pgaas/src/stage/opt/app/pgaas/etc/gen-recovery.conf b/pgaas/src/stage/opt/app/pgaas/etc/gen-recovery.conf deleted file mode 100644 index 1ad41c2..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/gen-recovery.conf +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$DBROOT" ] || die "DBROOT is not set" - -cd $DBROOT || die "Cannot cd $DBROOT" -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH - -PGNODES=$( getpropvalue -n pgnodes ) -HOSTNAME=`hostname -f` -PGNODEVALUE=$( gen-repmgr-info -n "$PGNODES" -l "$HOSTNAME" ) - -# node_name from repmgr.conf => application_name in recovery.conf conninfo line -# "node" value from repmgr.conf => primary_slot_name in recovery.conf with the string "repmgr_slot_" prefixed -# node_name in repmgr.conf can be the $HOSTNAME value ? - -pswd=$( ${INSTALL_ROOT}/opt/app/cdf/bin/getpropvalue -x -n repmgr ) - -appname=$HOSTNAME -PGNODEVALUE=$( gen-repmgr-info -n "$PGNODES" -l "$HOSTNAME" ) -umask 07 -cat <<-EOF > $DBROOT/recovery.conf - standby_mode = 'on' - primary_conninfo = 'user=repmgr password=$pswd host=$HOSTNAME port=5432 application_name=$HOSTNAME sslmode=prefer sslcompression=1' - recovery_target_timeline = 'latest' - primary_slot_name = repmgr_slot_$PGNODEVALUE -EOF - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/gen-repmgr.conf b/pgaas/src/stage/opt/app/pgaas/etc/gen-repmgr.conf deleted file mode 100755 index 924a097..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/gen-repmgr.conf +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH -LOGDIR=/opt/logs/dcae/postgresql/server - -PGNODES=$( getpropvalue -n pgnodes ) - -CLUSTER=pgaas -HOSTNAME=`hostname -f` -PGNODEVALUE=$( gen-repmgr-info -n "$PGNODES" -l "$HOSTNAME" ) -UPSTREAMPGNODE=$( gen-repmgr-info -n "$PGNODES" -c "$HOSTNAME" ) - -UPSTREAMTEXT="#upstream_node=" -case $UPSTREAMPGNODE in - DEFAULT ) ;; - * ) UPSTREAMTEXT="upstream_node=$UPSTREAMPGNODE" ;; -esac - -cat <<-EOF > repmgr.conf - cluster=$CLUSTER - node=$PGNODEVALUE - node_name=$HOSTNAME - conninfo='host=$HOSTNAME user=repmgr dbname=repmgr' - use_replication_slots=1 - $UPSTREAMTEXT - - failover=automatic - promote_command='repmgr standby promote -f $CFGDIR/main/repmgr.conf' - follow_command='repmgr standby follow -f $CFGDIR/main/repmgr.conf' - event_notification_command='/opt/app/pgaas/bin/repmgrd-status-changes %n %e %s "%t" "%d"' - - #Log level: possible values are DEBUG, INFO, NOTICE, WARNING, ERR, ALERT, CRIT or EMERG - loglevel=INFO - logfile='$LOGDIR/repmgr.log' -EOF - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/lock-and-create-db-backup b/pgaas/src/stage/opt/app/pgaas/etc/lock-and-create-db-backup deleted file mode 100644 index cb8586d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/lock-and-create-db-backup +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=${INSTALL_ROOT}/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found -fi - -export PATH=$PGDIR/bin:${INSTALL_ROOT}/opt/java/jdk/jdk170/bin:${INSTALL_ROOT}/opt/app/cdf/bin:${INSTALL_ROOT}/opt/app/pgaas/bin:$PATH - -LOCKFILE=/var/lock/create-db-backup - -testlock -s -t 0 -r 99 ${LOCKFILE} create-db-backup -retc=$? - -if [ $retc -eq 99 ] -then - echo Backup is already being created -fi -exit $retc - diff --git a/pgaas/src/stage/opt/app/pgaas/etc/makecerts b/pgaas/src/stage/opt/app/pgaas/etc/makecerts deleted file mode 100755 index 494c78b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/makecerts +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# NAME -# makecerts - Create elf-signed certificates for PostgreSQL -# -# USAGE -# makecerts [--force-overwrite] -# -# FILES -# /opt/app/pgaas/etc -# ssleay.cnf - template -# /opt/app/pgaas/lib -# ssl-cert-snakeoil.pem - public key -# ssl-cert-snakeoil.key - private key - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -dir=${INSTALL_ROOT}/opt/app/pgaas -etcdir=$dir/etc -libdir=$dir/lib -template="$etcdir/ssleay.cnf" - -usage() -{ - exec 1>&2 - echo "Usage: $0 [--force-overwrite]" - echo "Create self-signed certificates for $dir" - exit 1 -} - -set -x - -if [ -f "$libdir/ssl-cert-snakeoil.pem" ] && [ -f "$libdir/ssl-cert-snakeoil.key" ]; then - if [ "$1" != "--force-overwrite" ]; then - exit 0 - fi -fi - -# make_snakeoil - -if ! HostName="$(hostname -f)" ; then - HostName="$(hostname)" - echo "$0: Could not get FQDN, using \"$HostName\"." - echo "$0: You may want to fix your /etc/hosts and/or DNS setup and run" - echo "$0: '$0 --force-overwrite'" - echo "$0: again." -fi -if [ ${#HostName} -gt 64 ] ; then - AltName="DNS:$HostName" - HostName="$(hostname)" -fi - - -TMPFILE="$(mktemp /tmp/tmp.mc1.XXXXXXXXXX)" || die mktemp failed -TMPOUT="$(mktemp /tmp/tmp.mc2.XXXXXXXXXX)" || die mktemp failed - -trap "rm -f $TMPFILE $TMPOUT" EXIT 1 2 3 15 - -# create_temporary_cnf - sed -e s#@HostName@#"$HostName"# $template > $TMPFILE - [ -z "$AltName" ] || echo "subjectAltName=$AltName" >> $TMPFILE - -# create the certificate. - -umask 077 - -if ! openssl req -config $TMPFILE -new -x509 -days 3650 -nodes \ - -out $libdir/ssl-cert-snakeoil.pem \ - -keyout $libdir/ssl-cert-snakeoil.key > $TMPOUT 2>&1 -then - echo Could not create certificate. Openssl output was: >&2 - cat $TMPOUT >&2 - die openssl failed -fi -chmod 644 $libdir/ssl-cert-snakeoil.pem -chmod 600 $libdir/ssl-cert-snakeoil.key -# hash symlink -ln -sf ssl-cert-snakeoil.pem $libdir/$(openssl x509 -hash -noout -in $libdir/ssl-cert-snakeoil.pem) diff --git a/pgaas/src/stage/opt/app/pgaas/etc/makefile b/pgaas/src/stage/opt/app/pgaas/etc/makefile deleted file mode 100644 index b5a5484..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/makefile +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -CFGFILES= create_dcae_rotate.sql - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/etc - mkdir -p $(STAGEDIR)/$(DISTPATH)/etc - for i in *; do \ - case $$i in \ - *.py | gen*.conf ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/etc/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/etc/$$j; \ - ;; \ - *.conf | *.cfg | *.cnf | *.sql ) \ - cp $$i $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - chmod a+r $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - chmod a+rx $(STAGEDIR)/$(DISTPATH)/etc/$$i; \ - fi; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/etc/reset-db-secondary b/pgaas/src/stage/opt/app/pgaas/etc/reset-db-secondary deleted file mode 100644 index 5be1c60..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/reset-db-secondary +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -die() -{ - echo "$@" 1>&2 - exit 1 -} - -export CFGDIR=/opt/app/pgaas - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else die PostgreSQL bin directory not found -fi -export PGDIR - -export DBROOT=/dbroot/pgdata/main -export PATH=$PATH:/opt/app/pgaas/bin:/opt/app/pgaas/etc:/opt/app/cdf/bin:/opt/app/postgresql-config/etc - -clustertype=$( getpropvalue -n cluster ) -PGNODES=$( getpropvalue -n pgnodes ) -case $clustertype in - central ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -M "$master" ) - ;; - edge ) - host=$( hostname -f ) - export MASTER=$( gen-repmgr-info -n "$PGNODES" -C $host ) - ;; -esac - -[ -n "$CFGDIR" ] || die "CFGDIR is not set" -[ -n "$MASTER" ] || die "MASTER is not set" -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" - -# make certain that everything is down -pkill repmgrd -pkill repmgr -pg_ctl_stop - -# reset the database to a fresh copy of what is on the master -create-db-secondary diff --git a/pgaas/src/stage/opt/app/pgaas/etc/ssleay.cnf b/pgaas/src/stage/opt/app/pgaas/etc/ssleay.cnf deleted file mode 100644 index 2b665cc..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/ssleay.cnf +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -# -# SSLeay example configuration file. -# - -RANDFILE = /dev/urandom - -[ req ] -default_bits = 2048 -default_keyfile = privkey.pem -distinguished_name = req_distinguished_name -prompt = no -policy = policy_anything -req_extensions = v3_req -x509_extensions = v3_req - -[ req_distinguished_name ] -commonName = @HostName@ - -[ v3_req ] -basicConstraints = CA:FALSE diff --git a/pgaas/src/stage/opt/app/pgaas/etc/start-db b/pgaas/src/stage/opt/app/pgaas/etc/start-db deleted file mode 100644 index a91d16a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/start-db +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -rm -f $DBROOT/postmaster.pid -chmod 600 $CFGDIR/lib/*.key -$PGDIR/bin/pg_ctl start -D $DBROOT -o "-c config_file=$CFGDIR/main/postgresql.conf" diff --git a/pgaas/src/stage/opt/app/pgaas/etc/update-db-master b/pgaas/src/stage/opt/app/pgaas/etc/update-db-master deleted file mode 100644 index db0d5ba..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/update-db-master +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# update a master database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -# update postgresql.conf - got new ones -# update pg_hba.conf - got new ones -# set up repmgr.conf - in common - -# start the DB -start-db -sleep 10 - -# make sure the postgres password is right -$CFGDIR/etc/update-postgres-user - -# create temporal tables and other extensions, if needed -$CFGDIR/etc/create-extensions - -# create repmgr user/db, if needed -$CFGDIR/etc/create-repmgr-user - -# register as master -repmgr -f $CFGDIR/main/repmgr.conf master register -echo repmgr ret=$? - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 -repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose -echo repmgrd ret=$? -# start repmgrd (normal logging) -# repmgrd -f $CFGDIR/main/repmgr.conf -d diff --git a/pgaas/src/stage/opt/app/pgaas/etc/update-db-secondary b/pgaas/src/stage/opt/app/pgaas/etc/update-db-secondary deleted file mode 100644 index e06c810..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/update-db-secondary +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# update a secondary database -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$MASTER" ] || die "MASTER is not set" -[ -n "$PGDIR" ] || die "PGDIR is not set" -[ -n "$DBROOT" ] || die "DBROOT is not set" -[ -n "$CFGDIR" ] || die "CFGDIR is not set" - -cd $CFGDIR/main || die "Cannot cd $CFGDIR/main" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$CFGDIR/etc:$PGDIR/bin:$PATH - -umask 077 -TMP=$(mktemp /tmp/tmp.uds1.XXXXXXXXXX) -trap 'rm -f $TMP' 0 1 2 3 15 - -# update postgresql.conf - got new ones -# update pg_hba.conf - got new ones -# set up repmgr.conf - in common - -# replace/update recovery.conf -if [ -f $DBROOT/recovery.conf ];then mv $DBROOT/recovery.conf $DBROOT/recovery.conf.upgraded;fi -$CFGDIR/etc/gen-recovery.conf - -# wait until master DB is active and has repmgr available -max=40 -for s in `seq $max` -do - echo "$s of $max: Asking master $MASTER if repmgr is ready" - pgwget --progress=dot:giga -O$TMP http://$MASTER:8000/hasrepmgr - if [ -s $TMP ] - then - msg=$(cat $TMP) - case $msg in - OK* ) - echo "Master has repmgr ready" - done=yes - break - ;; - * ) - echo "Master does not have repmgr ready, msg=$msg" - ;; - esac - fi - rm -f $TMP - sleep 15 -done -[ "$done" = "yes" ] || die "Master never had repmgr available" - - -$CFGDIR/etc/start-db - -sleep 10 - -# make sure the postgres password is right -$CFGDIR/etc/update-postgres-user - -# register as standby -repmgr -f $CFGDIR/main/repmgr.conf standby register -echo repmgr ret=$? -sleep 10 - -# start repmgrd -# start repmgrd (verbose logging for testing) -umask 07 -repmgrd -f $CFGDIR/main/repmgr.conf -d --verbose -echo repmgrd ret=$? -# start repmgrd (normal logging) -# repmgrd -f $CFGDIR/main/repmgr.conf -d - -chmod 600 recovery.conf diff --git a/pgaas/src/stage/opt/app/pgaas/etc/update-postgres-user b/pgaas/src/stage/opt/app/pgaas/etc/update-postgres-user deleted file mode 100644 index 0466ad8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/etc/update-postgres-user +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -set -x - -die() -{ - echo $0: "$@" 1>&2 - echo $0: "$@" - umask 022 - echo $0: "$@" >> /tmp/pgaas-failures - exit 1 -} - -[ -n "$PGDIR" ] || die "PGDIR is not set" - -PATH=${INSTALL_ROOT}/opt/app/pgaas/bin:$PGDIR/bin:${INSTALL_ROOT}/opt/app/cdf/bin:$PATH -pswd=$( getpropvalue -x -n postgres ) - -psql <<-EOF - ALTER USER postgres PASSWORD '$pswd'; - EOF diff --git a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-idns.conf b/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-idns.conf deleted file mode 100644 index 62714f1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-idns.conf +++ /dev/null @@ -1,21 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS iDNS server provides information on the system, primarily for the iDNS system - -description "PGaaS iDNS server" - -start on runlevel [2345] -stop on runlevel [!2345] - -respawn -respawn limit 10 5 -umask 022 -setuid postgres - -pre-start script - test -x /opt/app/pgaas/lib/iDNS-responder || { stop; exit 0; } -end script - -script - /opt/app/pgaas/lib/iDNS-responder -end script diff --git a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-init.conf b/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-init.conf deleted file mode 100644 index 6f03c1f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/init-pgaas-init.conf +++ /dev/null @@ -1,24 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS init process needs a directory to be created on reboot -# -# The best way to do this is to have a file in /usr/lib/tmpfiles.d/pgaas: -# d /var/run/postgresql 2755 postgres postgres - -# -# This is a workaround because systemd-tmpfiles is not present. - -description "PGaaS /var/run/postgresql setup" - -start on runlevel [2345] -stop on runlevel [!2345] - -umask 022 - -pre-start script - mkdir -p /var/run/postgresql - chown postgres:postgres /var/run/postgresql -end script - -script - : -end script diff --git a/pgaas/src/stage/opt/app/pgaas/init/logrotate b/pgaas/src/stage/opt/app/pgaas/init/logrotate deleted file mode 100644 index 8531ed6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/logrotate +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -# rotate PGaaS log files - -/opt/logs/dcae/postgresql/init/*.log /opt/logs/dcae/postgresql/idns/*.log /opt/logs/dcae/postgresql/server/*.log { - missingok - compress - daily - rotate 60 - create - dateext -} diff --git a/pgaas/src/stage/opt/app/pgaas/init/makefile b/pgaas/src/stage/opt/app/pgaas/init/makefile deleted file mode 100644 index d2d8285..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/makefile +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/init - mkdir -p $(STAGEDIR)/$(DISTPATH)/init - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/init/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/init/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/init/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/init/$$i; \ - fi; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/init/pglogs.cron b/pgaas/src/stage/opt/app/pgaas/init/pglogs.cron deleted file mode 100644 index ff621ba..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/pglogs.cron +++ /dev/null @@ -1,4 +0,0 @@ -30 * * * * ( date ; find /dbroot/pglogs -type f -mtime +3 -exec rm {} + ) >> /tmp/cleanpglogs.log 2>&1 -50 1 * * * ( mv -f /tmp/cleanpglogs.log /tmp/cleanpglogs.log.old ) > /dev/null 2>&1 -* * * * * [ -x /opt/app/pgaas/bin/update_var_run_isrw ] && /opt/app/pgaas/bin/update_var_run_isrw -* * * * * [ -x /opt/app/pgaas/bin/check_cluster ] && /opt/app/pgaas/bin/check_cluster -d /var/run/postgresql/check_cluster >> /opt/logs/dcae/postgresql/idns/cluster.log diff --git a/pgaas/src/stage/opt/app/pgaas/init/systemd-pgaas-idns.service b/pgaas/src/stage/opt/app/pgaas/init/systemd-pgaas-idns.service deleted file mode 100644 index 007ca36..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/systemd-pgaas-idns.service +++ /dev/null @@ -1,16 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS iDNS server provides information on the system, primarily for the iDNS system - -[Unit] -Description=PGaaS iDNS server - -[Service] -User=postgres -Group=postgres -ExecStart= /opt/app/pgaas/lib/iDNS-responder -Restart=always -RestartSec=10 - -[Install] -WantedBy=multi-user.target diff --git a/pgaas/src/stage/opt/app/pgaas/init/tmpfiles-pgaas-init.conf b/pgaas/src/stage/opt/app/pgaas/init/tmpfiles-pgaas-init.conf deleted file mode 100644 index 9341a95..0000000 --- a/pgaas/src/stage/opt/app/pgaas/init/tmpfiles-pgaas-init.conf +++ /dev/null @@ -1,7 +0,0 @@ -# PGaaS - PostgreSQL as a Service -# -# The PGaaS init process needs a directory to be created on reboot -# - -d /var/run/postgresql 0755 postgres postgres - - diff --git a/pgaas/src/stage/opt/app/pgaas/lib/CommonLogger.py b/pgaas/src/stage/opt/app/pgaas/lib/CommonLogger.py deleted file mode 100755 index a50303f..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/CommonLogger.py +++ /dev/null @@ -1,941 +0,0 @@ -#!/usr/bin/python -# -*- indent-tabs-mode: nil -*- vi: set expandtab: -"""ECOMP Common Logging library in Python. - -CommonLogger.py - -# Copyright (C) 2016 AT&T Intellectual Property. All rights reserved. -# -# This code is licensed under the Apache License, Version 2.0; -# you may not use this code for any purpose except in compliance -# with the Apache License. You may obtain a copy of the License -# at http://www.att.com/openecomp.html. - -Original Written by: Terry Schmalzried -Date written: October 1, 2015 -Last updated: December 1, 2016 - -version 0.8 -""" - -from __future__ import print_function -import os, sys, getopt, logging, logging.handlers, time, re, uuid, socket, threading, collections - -class CommonLogger: - """ECOMP Common Logging object. - - Public methods: - __init__ - setFields - debug - info - warn - error - fatal - """ - - UnknownFile = -1 - ErrorFile = 0 - DebugFile = 1 - AuditFile = 2 - MetricsFile = 3 - DateFmt = '%Y-%m-%dT%H:%M:%S' - verbose = False - - def __init__(self, configFile, logKey, **kwargs): - """Construct a Common Logger for one Log File. - - Arguments: - configFile -- configuration filename. - logKey -- the keyword in configFile that identifies the log filename. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages, - one of CommonLogger.ErrorFile, CommonLogger.DebugFile, - CommonLogger.AuditFile and CommonLogger.MetricsFile, or - one of the strings "error", "debug", "audit" or "metrics". - May also be set in the config file using a field named - <logKey>Style (where <logKey> is the value of the logKey - parameter). The keyword value overrides the value in the - config file. - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._monitorFlag = False - - # Get configuration parameters - self._logKey = str(logKey) - self._configFile = str(configFile) - self._rotateMethod = 'time' - self._timeRotateIntervalType = 'midnight' - self._timeRotateInterval = 1 - self._sizeMaxBytes = 0 - self._sizeRotateMode = 'a' - self._socketHost = None - self._socketPort = 0 - self._typeLogger = 'filelogger' - self._backupCount = 6 - self._logLevelThreshold = self._intLogLevel('') - self._logFile = None - self._begTime = None - self._begMsec = 0 - self._fields = {} - self._fields["style"] = CommonLogger.UnknownFile - try: - self._configFileModified = os.path.getmtime(self._configFile) - for line in open(self._configFile): - line = line.split('#',1)[0] # remove comments - if '=' in line: - key, value = [x.strip() for x in line.split('=',1)] - if key == 'rotateMethod' and value.lower() in ['time', 'size', 'none']: - self._rotateMethod = value.lower() - elif key == 'timeRotateIntervalType' and value in ['S', 'M', 'H', 'D', 'W0', 'W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'midnight']: - self._timeRotateIntervalType = value - elif key == 'timeRotateInterval' and int( value ) > 0: - self._timeRotateInterval = int( value ) - elif key == 'sizeMaxBytes' and int( value ) >= 0: - self._sizeMaxBytes = int( value ) - elif key == 'sizeRotateMode' and value in ['a']: - self._sizeRotateMode = value - elif key == 'backupCount' and int( value ) >= 0: - self._backupCount = int( value ) - elif key == self._logKey + 'SocketHost': - self._socketHost = value - elif key == self._logKey + 'SocketPort' and int( value ) == 0: - self._socketPort = int( value ) - elif key == self._logKey + 'LogType' and value.lower() in ['filelogger', 'stdoutlogger', 'stderrlogger', 'socketlogger', 'nulllogger']: - self._typeLogger = value.lower() - elif key == self._logKey + 'LogLevel': - self._logLevelThreshold = self._intLogLevel(value.upper()) - elif key == self._logKey + 'Style': - self._fields["style"] = value - elif key == self._logKey: - self._logFile = value - except Exception as x: - print("exception reading '%s' configuration file: %s" %(self._configFile, str(x)), file=sys.stderr) - sys.exit(2) - except: - print("exception reading '%s' configuration file" %(self._configFile), file=sys.stderr) - sys.exit(2) - - if self._logFile is None: - print('configuration file %s is missing definition %s for log file' %(self._configFile, self._logKey), file=sys.stderr) - sys.exit(2) - - - # initialize default log fields - # timestamp will automatically be generated - for key in ['style', 'requestID', 'serviceInstanceID', 'threadID', 'serverName', 'serviceName', 'instanceUUID', \ - 'severity', 'serverIPAddress', 'server', 'IPAddress', 'className', 'timer', \ - 'partnerName', 'targetEntity', 'targetServiceName', 'statusCode', 'responseCode', \ - 'responseDescription', 'processKey', 'targetVirtualEntity', 'customField1', \ - 'customField2', 'customField3', 'customField4', 'errorCategory', 'errorCode', \ - 'errorDescription' ]: - if key in kwargs and kwargs[key] != None: - self._fields[key] = kwargs[key] - - self._resetStyleField() - - # Set up logger - self._logLock = threading.Lock() - with self._logLock: - self._logger = logging.getLogger(self._logKey) - self._logger.propagate = False - self._createLogger() - - self._defaultServerInfo() - - # spawn a thread to monitor configFile for logLevel and logFile changes - self._monitorFlag = True - self._monitorThread = threading.Thread(target=self._monitorConfigFile, args=()) - self._monitorThread.daemon = True - self._monitorThread.start() - - - def _createLogger(self): - if self._typeLogger == 'filelogger': - self._mkdir_p(self._logFile) - if self._rotateMethod == 'time': - self._logHandler = logging.handlers.TimedRotatingFileHandler(self._logFile, \ - when=self._timeRotateIntervalType, interval=self._timeRotateInterval, \ - backupCount=self._backupCount, encoding=None, delay=False, utc=True) - elif self._rotateMethod == 'size': - self._logHandler = logging.handlers.RotatingFileHandler(self._logFile, \ - mode=self._sizeRotateMode, maxBytes=self._sizeMaxBytes, \ - backupCount=self._backupCount, encoding=None, delay=False) - - else: - self._logHandler = logging.handlers.WatchedFileHandler(self._logFile, \ - mode=self._sizeRotateMode, \ - encoding=None, delay=False) - elif self._typeLogger == 'stderrlogger': - self._logHandler = logging.handlers.StreamHandler(sys.stderr) - elif self._typeLogger == 'stdoutlogger': - self._logHandler = logging.handlers.StreamHandler(sys.stdout) - elif self._typeLogger == 'socketlogger': - self._logHandler = logging.handlers.SocketHandler(self._socketHost, self._socketPort) - elif self._typeLogger == 'nulllogger': - self._logHandler = logging.handlers.NullHandler() - - if self._fields["style"] == CommonLogger.AuditFile or self._fields["style"] == CommonLogger.MetricsFile: - self._logFormatter = logging.Formatter(fmt='%(begtime)s,%(begmsecs)03d+00:00|%(endtime)s,%(endmsecs)03d+00:00|%(message)s', datefmt=CommonLogger.DateFmt) - else: - self._logFormatter = logging.Formatter(fmt='%(asctime)s,%(msecs)03d+00:00|%(message)s', datefmt='%Y-%m-%dT%H:%M:%S') - self._logFormatter.converter = time.gmtime - self._logHandler.setFormatter(self._logFormatter) - self._logger.addHandler(self._logHandler) - - def _resetStyleField(self): - styleFields = ["error", "debug", "audit", "metrics"] - if self._fields['style'] in styleFields: - self._fields['style'] = styleFields.index(self._fields['style']) - - def __del__(self): - if self._monitorFlag == False: - return - - self._monitorFlag = False - - if self._monitorThread is not None and self._monitorThread.is_alive(): - self._monitorThread.join() - - self._monitorThread = None - - - def _defaultServerInfo(self): - - # If not set or purposely set = None, then set default - if self._fields.get('server') is None: - try: - self._fields['server'] = socket.getfqdn() - except Exception as err: - try: - self._fields['server'] = socket.gethostname() - except Exception as err: - self._fields['server'] = "" - - # If not set or purposely set = None, then set default - if self._fields.get('serverIPAddress') is None: - try: - self._fields['serverIPAddress'] = socket.gethostbyname(self._fields['server']) - except Exception as err: - self._fields['serverIPAddress'] = "" - - - def _monitorConfigFile(self): - while self._monitorFlag: - try: - fileTime = os.path.getmtime(self._configFile) - if fileTime > self._configFileModified: - self._configFileModified = fileTime - ReopenLogFile = False - logFile = self._logFile - with open(self._configFile) as fp: - for line in fp: - line = line.split('#',1)[0] # remove comments - if '=' in line: - key, value = [x.strip() for x in line.split('=',1)] - if key == 'rotateMethod' and value.lower() in ['time', 'size', 'none'] and self._rotateMethod != value: - self._rotateMethod = value.lower() - ReopenLogFile = True - elif key == 'timeRotateIntervalType' and value in ['S', 'M', 'H', 'D', 'W0', 'W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'midnight']: - self._timeRotateIntervalType = value - ReopenLogFile = True - elif key == 'timeRotateInterval' and int( value ) > 0: - self._timeRotateInterval = int( value ) - ReopenLogFile = True - elif key == 'sizeMaxBytes' and int( value ) >= 0: - self._sizeMaxBytes = int( value ) - ReopenLogFile = True - elif key == 'sizeRotateMode' and value in ['a']: - self._sizeRotateMode = value - ReopenLogFile = True - elif key == 'backupCount' and int( value ) >= 0: - self._backupCount = int( value ) - ReopenLogFile = True - elif key == self._logKey + 'SocketHost' and self._socketHost != value: - self._socketHost = value - ReopenLogFile = True - elif key == self._logKey + 'SocketPort' and self._socketPort > 0 and self._socketPort != int( value ): - self._socketPort = int( value ) - ReopenLogFile = True - elif key == self._logKey + 'LogLevel' and self._logLevelThreshold != self._intLogLevel( value.upper() ): - self._logLevelThreshold = self._intLogLevel(value.upper()) - elif key == self._logKey + 'LogType' and self._typeLogger != value and value.lower() in ['filelogger', 'stdoutlogger', 'stderrlogger', 'socketlogger', 'nulllogger']: - self._typeLogger = value.lower() - ReopenLogFile = True - elif key == self._logKey + 'Style': - self._fields["style"] = value - self._resetStyleField() - elif key == self._logKey and self._logFile != value: - logFile = value - ReopenLogFile = True - if ReopenLogFile: - with self._logLock: - self._logger.removeHandler(self._logHandler) - self._logFile = logFile - self._createLogger() - except Exception as err: - pass - - time.sleep(5) - - - def setFields(self, **kwargs): - """Set default values for log fields. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - for key in ['style', 'requestID', 'serviceInstanceID', 'threadID', 'serverName', 'serviceName', 'instanceUUID', \ - 'severity', 'serverIPAddress', 'server', 'IPAddress', 'className', 'timer', \ - 'partnerName', 'targetEntity', 'targetServiceName', 'statusCode', 'responseCode', \ - 'responseDescription', 'processKey', 'targetVirtualEntity', 'customField1', \ - 'customField2', 'customField3', 'customField4', 'errorCategory', 'errorCode', \ - 'errorDescription' ]: - if key in kwargs: - if kwargs[key] != None: - self._fields[key] = kwargs[key] - elif key in self._fields: - del self._fields[key] - - self._defaultServerInfo() - - - def debug(self, message, **kwargs): - """Write a DEBUG level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('DEBUG', message, errorCategory = 'DEBUG', **kwargs) - - def info(self, message, **kwargs): - """Write an INFO level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('INFO', message, errorCategory = 'INFO', **kwargs) - - def warn(self, message, **kwargs): - """Write a WARN level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('WARN', message, errorCategory = 'WARN', **kwargs) - - def error(self, message, **kwargs): - """Write an ERROR level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('ERROR', message, errorCategory = 'ERROR', **kwargs) - - def fatal(self, message, **kwargs): - """Write a FATAL level message to the log file. - - Arguments: - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - self._log('FATAL', message, errorCategory = 'FATAL', **kwargs) - - def _log(self, logLevel, message, **kwargs): - """Write a message to the log file. - - Arguments: - logLevel -- value ('DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL', ...) for the log record. - message -- value for the last log record field. - - Keyword arguments: Annotations are d:debug, a=audit, m=metrics, e=error - style -- the log file format (style) to use when writing log messages - requestID (dame) -- optional default value for this log record field. - serviceInstanceID (am) -- optional default value for this log record field. - threadID (am) -- optional default value for this log record field. - serverName (am) -- optional default value for this log record field. - serviceName (am) -- optional default value for this log record field. - instanceUUID (am) -- optional default value for this log record field. - severity (am) -- optional default value for this log record field. - serverIPAddress (am) -- optional default value for this log record field. - server (am) -- optional default value for this log record field. - IPAddress (am) -- optional default value for this log record field. - className (am) -- optional default value for this log record field. - timer (am) -- (ElapsedTime) optional default value for this log record field. - partnerName (ame) -- optional default value for this log record field. - targetEntity (me) -- optional default value for this log record field. - targetServiceName (me) -- optional default value for this log record field. - statusCode (am) -- optional default value for this log record field. - responseCode (am) -- optional default value for this log record field. - responseDescription (am) -- optional default value for this log record field. - processKey (am) -- optional default value for this log record field. - targetVirtualEntity (m) -- optional default value for this log record field. - customField1 (am) -- optional default value for this log record field. - customField2 (am) -- optional default value for this log record field. - customField3 (am) -- optional default value for this log record field. - customField4 (am) -- optional default value for this log record field. - errorCategory (e) -- optional default value for this log record field. - errorCode (e) -- optional default value for this log record field. - errorDescription (e) -- optional default value for this log record field. - begTime (am) -- optional starting time for this audit/metrics log record. - - Note: the pipe '|' character is not allowed in any log record field. - """ - - # timestamp will automatically be inserted - style = int(self._getVal('style', '', **kwargs)) - requestID = self._getVal('requestID', '', **kwargs) - serviceInstanceID = self._getVal('serviceInstanceID', '', **kwargs) - threadID = self._getVal('threadID', threading.currentThread().getName(), **kwargs) - serverName = self._getVal('serverName', '', **kwargs) - serviceName = self._getVal('serviceName', '', **kwargs) - instanceUUID = self._getVal('instanceUUID', '', **kwargs) - upperLogLevel = self._noSep(logLevel.upper()) - severity = self._getVal('severity', '', **kwargs) - serverIPAddress = self._getVal('serverIPAddress', '', **kwargs) - server = self._getVal('server', '', **kwargs) - IPAddress = self._getVal('IPAddress', '', **kwargs) - className = self._getVal('className', '', **kwargs) - timer = self._getVal('timer', '', **kwargs) - partnerName = self._getVal('partnerName', '', **kwargs) - targetEntity = self._getVal('targetEntity', '', **kwargs) - targetServiceName = self._getVal('targetServiceName', '', **kwargs) - statusCode = self._getVal('statusCode', '', **kwargs) - responseCode = self._getVal('responseCode', '', **kwargs) - responseDescription = self._noSep(self._getVal('responseDescription', '', **kwargs)) - processKey = self._getVal('processKey', '', **kwargs) - targetVirtualEntity = self._getVal('targetVirtualEntity', '', **kwargs) - customField1 = self._getVal('customField1', '', **kwargs) - customField2 = self._getVal('customField2', '', **kwargs) - customField3 = self._getVal('customField3', '', **kwargs) - customField4 = self._getVal('customField4', '', **kwargs) - errorCategory = self._getVal('errorCategory', '', **kwargs) - errorCode = self._getVal('errorCode', '', **kwargs) - errorDescription = self._noSep(self._getVal('errorDescription', '', **kwargs)) - nbegTime = self._getArg('begTime', {}, **kwargs) - - detailMessage = self._noSep(message) - if bool(re.match(r" *$", detailMessage)): - return # don't log empty messages - - useLevel = self._intLogLevel(upperLogLevel) - if CommonLogger.verbose: print("logger STYLE=%s" % style) - if useLevel < self._logLevelThreshold: - if CommonLogger.verbose: print("skipping because of level") - pass - else: - with self._logLock: - if style == CommonLogger.ErrorFile: - if CommonLogger.verbose: print("using CommonLogger.ErrorFile") - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, threadID, serviceName, partnerName, targetEntity, targetServiceName, - errorCategory, errorCode, errorDescription, detailMessage)) - elif style == CommonLogger.DebugFile: - if CommonLogger.verbose: print("using CommonLogger.DebugFile") - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, threadID, serverName, serviceName, instanceUUID, upperLogLevel, - severity, serverIPAddress, server, IPAddress, className, timer, detailMessage)) - elif style == CommonLogger.AuditFile: - if CommonLogger.verbose: print("using CommonLogger.AuditFile") - endAuditTime, endAuditMsec = self._getTime() - if type(nbegTime) is dict and 'begTime' in nbegTime and 'begMsec' in nbegTime: - d = { 'begtime': self._noSep(nbegTime['begTime']), 'begmsecs': float(self._noSep(nbegTime['begMsec'])), 'endtime': endAuditTime, 'endmsecs': endAuditMsec } - elif self._begTime is not None: - d = { 'begtime': self._begTime, 'begmsecs': self._begMsec, 'endtime': endAuditTime, 'endmsecs': endAuditMsec } - else: - d = { 'begtime': endAuditTime, 'begmsecs': endAuditMsec, 'endtime': endAuditTime, 'endmsecs': endAuditMsec } - self._begTime = None - unused = "" - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, serviceInstanceID, threadID, serverName, serviceName, partnerName, - statusCode, responseCode, responseDescription, instanceUUID, upperLogLevel, - severity, serverIPAddress, timer, server, IPAddress, className, unused, - processKey, customField1, customField2, customField3, customField4, detailMessage), extra=d) - elif style == CommonLogger.MetricsFile: - if CommonLogger.verbose: print("using CommonLogger.MetricsFile") - endMetricsTime, endMetricsMsec = self._getTime() - if type(nbegTime) is dict and 'begTime' in nbegTime and 'begMsec' in nbegTime: - d = { 'begtime': self._noSep(nbegTime['begTime']), 'begmsecs': float(self._noSep(nbegTime['begMsec'])), 'endtime': endMetricsTime, 'endmsecs': endMetricsMsec } - elif self._begTime is not None: - d = { 'begtime': self._begTime, 'begmsecs': self._begMsec, 'endtime': endMetricsTime, 'endmsecs': endMetricsMsec } - else: - d = { 'begtime': endMetricsTime, 'begmsecs': endMetricsMsec, 'endtime': endMetricsTime, 'endmsecs': endMetricsMsec } - self._begTime = None - unused = "" - self._logger.log(50, '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' \ - %(requestID, serviceInstanceID, threadID, serverName, serviceName, partnerName, - targetEntity, targetServiceName, statusCode, responseCode, responseDescription, - instanceUUID, upperLogLevel, severity, serverIPAddress, timer, server, IPAddress, - className, unused, processKey, targetVirtualEntity, customField1, customField2, - customField3, customField4, detailMessage), extra=d) - else: - print("!!!!!!!!!!!!!!!! style not set: %s" % self._fields["style"]) - - def _getTime(self): - ct = time.time() - lt = time.localtime(ct) - return (time.strftime(CommonLogger.DateFmt, lt), (ct - int(ct)) * 1000) - - def setStartRecordEvent(self): - """ - Set the start time to be saved for both audit and metrics records - """ - self._begTime, self._begMsec = self._getTime() - - def getStartRecordEvent(self): - """ - Retrieve the start time to be used for either audit and metrics records - """ - begTime, begMsec = self._getTime() - return {'begTime':begTime, 'begMsec':begMsec} - - def _getVal(self, key, default, **kwargs): - val = self._fields.get(key) - if key in kwargs: val = kwargs[key] - if val is None: val = default - return self._noSep(val) - - def _getArg(self, key, default, **kwargs): - val = None - if key in kwargs: val = kwargs[key] - if val is None: val = default - return val - - def _noSep(self, message): - if message is None: return '' - return re.sub(r'[\|\n]', ' ', str(message)) - - def _intLogLevel(self, logLevel): - if logLevel == 'FATAL': useLevel = 50 - elif logLevel == 'ERROR': useLevel = 40 - elif logLevel == 'WARN': useLevel = 30 - elif logLevel == 'INFO': useLevel = 20 - elif logLevel == 'DEBUG': useLevel = 10 - else: useLevel = 0 - return useLevel - - def _mkdir_p(self, filename): - """Create missing directories from a full filename path like mkdir -p""" - - if filename is None: - return - - folder=os.path.dirname(filename) - - if folder == "": - return - - if not os.path.exists(folder): - try: - os.makedirs(folder) - except OSError as err: - print("error number %d creating %s directory to hold %s logfile: %s" %(err.errno, err.filename, filename, err.strerror), file=sys.stderr) - sys.exit(2) - except Exception as err: - print("error creating %s directory to hold %s logfile: %s" %(folder, filename, str(err)), file=sys.stderr) - sys.exit(2) - -if __name__ == "__main__": - - def __checkOneTime(line): - format = r'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}[+]00:00[|]' - m = re.match(format, line) - if not m: - print("ERROR: time string did not match proper time format, %s" %line) - print("\t: format=%s" % format) - return 1 - return 0 - - def __checkTwoTimes(line, different): - format = r'[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:([0-9]{2}),([0-9]{3})[+]00:00[|][0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:([0-9]{2}),([0-9]{3})[+]00:00[|]' - m = re.match(format, line) - if not m: - print("ERROR: time strings did not match proper time format, %s" %line) - print("\t: format=%s" % format) - return 1 - second1 = int(m.group(1)) - msec1 = int(m.group(2)) - second2 = int(m.group(3)) - msec2 = int(m.group(4)) - if second1 > second2: second2 += 60 - t1 = second1 * 1000 + msec1 - t2 = second2 * 1000 + msec2 - diff = t2 - t1 - # print("t1=%d (%d,%d) t2=%d (%d,%d), diff = %d" % (t1, second1, msec1, t2, second2, msec2, diff)) - if different: - if diff < 500: - print("ERROR: times did not differ enough: %s" % line) - return 1 - else: - if diff > 10: - print("ERROR: times were too far apart: %s" % line) - return 1 - return 0 - - def __checkBegTime(line): - format = "begTime should be ([-0-9T:]+)" - # print("checkBegTime(%s)" % line) - strt = 'begTime should be ' - i = line.index(strt) - rest = line[i+len(strt):].rstrip() - if not line.startswith(rest + ","): - print("ERROR: line %s should start with %s" % (line,rest)) - return 1 - return 0 - - def __checkLog(logfile, numLines, numFields): - lineCount = 0 - errorCount = 0 - with open(logfile, "r") as fp: - for line in fp: - # print("saw line %s" % line) - lineCount += 1 - c = line.count('|') - if c != numFields: - print("ERROR: wrong number of fields. Expected %d, got %d: %s" % (numFields, c, line)) - errorCount += 1 - if re.search("should not appear", line): - print("ERROR: a line appeared that should not have appeared, %s" % line) - errorCount += 1 - elif re.search("single time", line): - errorCount += __checkOneTime(line) - elif re.search("time should be the same", line): - errorCount += __checkTwoTimes(line, different=False) - elif re.search("time should be ", line): - errorCount += __checkTwoTimes(line, different=True) - elif re.search("begTime should be ", line): - errorCount += __checkBegTime(line) - else: - print("ERROR: an unknown message appeared, %s" % line) - errorCount += 1 - - if lineCount != numLines: - print("ERROR: expected %d lines, but got %d lines" % (numLines, lineCount)) - errorCount += 1 - return errorCount - - import os, argparse - parser = argparse.ArgumentParser(description="test the CommonLogger functions") - parser.add_argument("-k", "--keeplogs", help="Keep the log files after finishing the tests", action="store_true") - parser.add_argument("-v", "--verbose", help="Print debugging messages", action="store_true") - args = parser.parse_args() - - spid = str(os.getpid()) - if args.keeplogs: - spid = "" - logcfg = "/tmp/cl.log" + spid + ".cfg" - errorLog = "/tmp/cl.error" + spid + ".log" - metricsLog = "/tmp/cl.metrics" + spid + ".log" - auditLog = "/tmp/cl.audit" + spid + ".log" - debugLog = "/tmp/cl.debug" + spid + ".log" - if args.verbose: CommonLogger.verbose = True - - import atexit - def cleanupTmps(): - for f in [ logcfg, errorLog, metricsLog, auditLog, debugLog ]: - try: - os.remove(f) - except: - pass - if not args.keeplogs: - atexit.register(cleanupTmps) - - with open(logcfg, "w") as o: - o.write("error = " + errorLog + "\n" + - "errorLogLevel = WARN\n" + - "metrics = " + metricsLog + "\n" + - "metricsLogLevel = INFO\n" + - "audit = " + auditLog + "\n" + - "auditLogLevel = INFO\n" + - "debug = " + debugLog + "\n" + - "debugLogLevel = DEBUG\n") - - import uuid - instanceUUID = uuid.uuid1() - serviceName = "testharness" - errorLogger = CommonLogger(logcfg, "error", style=CommonLogger.ErrorFile, instanceUUID=instanceUUID, serviceName=serviceName) - debugLogger = CommonLogger(logcfg, "debug", style=CommonLogger.DebugFile, instanceUUID=instanceUUID, serviceName=serviceName) - auditLogger = CommonLogger(logcfg, "audit", style=CommonLogger.AuditFile, instanceUUID=instanceUUID, serviceName=serviceName) - metricsLogger = CommonLogger(logcfg, "metrics", style=CommonLogger.MetricsFile, instanceUUID=instanceUUID, serviceName=serviceName) - - testsRun = 0 - errorCount = 0 - errorLogger.debug("error calling debug (should not appear)") - errorLogger.info("error calling info (should not appear)") - errorLogger.warn("error calling warn (single time)") - errorLogger.error("error calling error (single time)") - errorLogger.setStartRecordEvent() - time.sleep(1) - errorLogger.fatal("error calling fatal, after setStartRecordEvent and sleep (start should be ignored, single time)") - testsRun += 6 - errorCount += __checkLog(errorLog, 3, 10) - - auditLogger.debug("audit calling debug (should not appear)") - auditLogger.info("audit calling info (time should be the same)") - auditLogger.warn("audit calling warn (time should be the same)") - auditLogger.error("audit calling error (time should be the same)") - bt = auditLogger.getStartRecordEvent() - # print("bt=%s" % bt) - time.sleep(1) - auditLogger.setStartRecordEvent() - time.sleep(1) - auditLogger.fatal("audit calling fatal, after setStartRecordEvent and sleep, time should be different)") - time.sleep(1) - auditLogger.fatal("audit calling fatal, begTime should be %s" % bt['begTime'], begTime=bt) - testsRun += 7 - errorCount += __checkLog(auditLog, 5, 25) - - debugLogger.debug("debug calling debug (single time)") - debugLogger.info("debug calling info (single time)") - debugLogger.warn("debug calling warn (single time)") - debugLogger.setStartRecordEvent() - time.sleep(1) - debugLogger.error("debug calling error, after SetStartRecordEvent and sleep (start should be ignored, single time)") - debugLogger.fatal("debug calling fatal (single time)") - errorCount += __checkLog(debugLog, 5, 13) - testsRun += 6 - - metricsLogger.debug("metrics calling debug (should not appear)") - metricsLogger.info("metrics calling info (time should be the same)") - metricsLogger.warn("metrics calling warn (time should be the same)") - bt = metricsLogger.getStartRecordEvent() - time.sleep(1) - metricsLogger.setStartRecordEvent() - time.sleep(1) - metricsLogger.error("metrics calling error, after SetStartRecordEvent and sleep, time should be different") - metricsLogger.fatal("metrics calling fatal (time should be the same)") - time.sleep(1) - metricsLogger.fatal("metrics calling fatal, begTime should be %s" % bt['begTime'], begTime=bt) - testsRun += 6 - errorCount += __checkLog(metricsLog, 5, 28) - - print("%d tests run, %d errors found" % (testsRun, errorCount)) diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/green-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/green-flasher-12x10.gif Binary files differdeleted file mode 100644 index c6d33b5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/green-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/grey-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/grey-flasher-12x10.gif Binary files differdeleted file mode 100644 index dfa81a2..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/grey-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/makefile b/pgaas/src/stage/opt/app/pgaas/lib/gif/makefile deleted file mode 100644 index 105033d..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/makefile +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -all: - -test: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - mkdir -p $(STAGEDIR)/$(DISTPATH)/lib/gif - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/gif/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/gif/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/gif/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/gif/$$i; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/red-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/red-flasher-12x10.gif Binary files differdeleted file mode 100644 index ab16a81..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/red-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-G-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-G-12x25.gif Binary files differdeleted file mode 100644 index 0ce2785..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-G-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-R-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-R-12x25.gif Binary files differdeleted file mode 100644 index 0750594..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-R-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-Y-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-Y-12x25.gif Binary files differdeleted file mode 100644 index 4f95bf0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-Y-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g-12x25.gif Binary files differdeleted file mode 100644 index 0ce2785..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g2-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g2-12x25.gif Binary files differdeleted file mode 100644 index 1be7fa1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-g2-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-green.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-green.gif Binary files differdeleted file mode 100644 index 1be7fa1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-green.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-red.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-red.gif Binary files differdeleted file mode 100644 index daa6960..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-red.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-yellow.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-yellow.gif Binary files differdeleted file mode 100644 index 1bd8731..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-master-yellow.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r-12x25.gif Binary files differdeleted file mode 100644 index 0750594..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r2-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r2-12x25.gif Binary files differdeleted file mode 100644 index ff26986..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r2-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r3-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r3-12x25.gif Binary files differdeleted file mode 100644 index daa6960..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-r3-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-green.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-green.gif Binary files differdeleted file mode 100644 index c6d33b5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-green.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-red.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-red.gif Binary files differdeleted file mode 100644 index ab16a81..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-red.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-yellow.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-yellow.gif Binary files differdeleted file mode 100644 index 5e16750..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-secondary-yellow.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y-12x25.gif Binary files differdeleted file mode 100644 index 4f95bf0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y2-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y2-12x25.gif Binary files differdeleted file mode 100644 index 886e548..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y2-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y3-12x25.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y3-12x25.gif Binary files differdeleted file mode 100644 index 1bd8731..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/stoplight-y3-12x25.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/gif/yellow-flasher-12x10.gif b/pgaas/src/stage/opt/app/pgaas/lib/gif/yellow-flasher-12x10.gif Binary files differdeleted file mode 100644 index 5e16750..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/gif/yellow-flasher-12x10.gif +++ /dev/null diff --git a/pgaas/src/stage/opt/app/pgaas/lib/iDNS-responder.py b/pgaas/src/stage/opt/app/pgaas/lib/iDNS-responder.py deleted file mode 100755 index f295040..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/iDNS-responder.py +++ /dev/null @@ -1,1105 +0,0 @@ -#!/usr/bin/env python3 -# -*- indent-tabs-mode: nil -*- -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -import http.server, socket -import time, os, sys, re, subprocess, traceback, html, base64, argparse -import psycopg2 -# TODO - move lots of code to a common library to share with other python modules -# sys.path.append("/opt/app/pgaas/lib") -# import dbtools - -DEF_HOST_NAME = os.popen("hostname -f").readlines()[0].strip() -DEF_PORT_NUMBER = 8000 - -validPerDbTables = [ "pg_tables", "pg_indexes", "pg_views" ] -topButton = " <font size='1'><a href='#'>^</a></font>" - -getLogDict = { } -def openLogFile(fname): - """ - Open a log file for append and remember the file descriptor. - Remember its inode/dev pair. - If either changes, reopen it. - """ - reopen = False - try: - curstat = os.stat(fname) - except: - reopen = True - global getLogDict - # print("top: reopen(%s)=%s" % (fname, reopen)) - if not reopen and getLogDict.get(fname): - # print("found getLogDict.get(" + fname + ")") - d = getLogDict[fname] - fd = d["fd"] if "fd" in d else None - oldstat = d["stat"] if "stat" in d else None - if fd is None: - reopen = True - elif oldstat is None: - reopen = True - elif oldstat.st_ino != curstat.st_ino or oldstat.st_dev != curstat.st_dev: - reopen = True - if reopen or not getLogDict.get(fname): - # print("closing old fd") - oldd = getLogDict.get(fname) - if oldd is not None: - oldfd = oldd.get("fd") - if oldfd is not None: - oldfd.close() - # print("reopening " + fname) - fd = open(fname, "a") - st = os.stat(fname) - getLogDict[fname] = { "fd": fd, "stat": st } - return getLogDict[fname]["fd"] - -def traceMsg(msg): - """ print a trace message. By default, this goes to trace.out """ - file = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/trace.log") - print(time.asctime(), msg, file=file) - file.flush() - -def errTrace(msg): - """ print an error message. By default, sys.stderr is rerouted to error.log """ - file = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/error.log") - sys.stderr = file - print(time.asctime(), msg, file=file) - file.flush() - -def debugTrace(msg): - """ print a debug message. By default, this goes to debug.log """ - if debugOn: - file = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/debug.log") - print(time.asctime(), msg, file=file) - file.flush() - -def readFile(file, defStr = None, mode = "r"): - """ read a file and return its contents """ - ret = defStr - try: - with open(file, mode) as f: - ret = f.read() - except Exception as e: - if defStr is not None: - ret = defStr - pass - else: - raise e - return ret - -def readFileBinary(file, defStr = None): - return readFile(file, defStr = defStr, mode = "rb") - -def readFileHtml(file, defStr = None): - """ read a file and return its contents, escaping anything important to HTML """ - return html.escape(readFile(file, defStr)) - -def readPipe(cmd, ignoreError = False): - """ read a pipe and return its contents """ - ret = "" - try: - with os.popen(cmd) as p: - ret = p.read() - except Exception as e: - if ignoreError: - pass - else: - raise e - return ret - -def readPipeHtml(file, defStr = None): - """ read a pipe and return its contents, escaping anything important to HTML """ - return html.escape(readPipe(file, defStr)) - -def readFileOrGz(file, defStr = None): - """ read a file and return its contents. If the file ends in .gz, use gunzip on it """ - if file.endswith(".gz"): - return readPipe("gunzip < '" + file + "'", defStr) - else: - return readFile(file, defStr) - -def readFileOrGzHtml(file, defStr = None): - """ read a file and return its contents, escaping anything important to HTML. If the file ends in .gz, use gunzip on it """ - return html.escape(readFileOrGz(file, defStr)) - -def getCdfPropValue(nm, encrypted=False, cfg="/opt/app/cdf/lib/cdf.cfg", dflt=None): - """ - Return a value from the configuration file /opt/app/cdf/lib/cdf.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt) - -def getPgaasPropValue(nm, encrypted=False, cfg="/opt/app/pgaas/lib/pgaas.cfg", dflt=None): - """ - Return a value from the configuration file /opt/app/pgaas/lib/pgaas.cfg - """ - return getPropValue(nm=nm, encrypted=encrypted, cfg=cfg, dflt=dflt) - -getPropDict = { } - -def getPropValue(nm, encrypted=False, cfg=None, dflt=None): - """ - Return a value from the specified configuration file - """ - if cfg is None: - return None - global getPropDict - if getPropDict.get(cfg): - savedDate = getPropDict[cfg] - debugTrace("getPropValue: savedDate[" + cfg + "]=" + str(savedDate)) - cfgDate = os.path.getmtime(cfg) - debugTrace("getPropValue: cfgDate=" + str(cfgDate)) - if float(savedDate) >= float(cfgDate): # cfg has not changed - val = getPropDict.get(cfg + ":" + nm) - debugTrace("getPropValue: val=" + str(val)) - if val is not None: - debugTrace("getPropValue: getPropValue(saved) => '%s'" % str(val)) - return val - else: # clear out any previously saved keys - cfgcolon = cfg + ":" - for k in list(getPropDict.keys()): - if re.match(cfgcolon, k): - del getPropDict[k] - getPropValueProgram = '/opt/app/cdf/bin/getpropvalue' - if encrypted: - cmd = [getPropValueProgram, "-f", cfg, "-x", "-n", nm] - else: - cmd = [getPropValueProgram, "-f", cfg, "-n", nm] - debugTrace("getPropValue: cmd=%s" % str(cmd)) - - try: - with subprocess.Popen(cmd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) as p: - (origString, stderrString) = p.communicate() - except Exception as e: - traceback.print_exc() - errTrace("Error decoding string because {0}".format(e)) - return None - else: - if stderrString: - if not re.search("Configuration property .* must be defined", stderrString.decode('utf-8')): # and dflt is not None: - errTrace("Error decoding string because: {0} ".format(stderrString)) - return dflt - else: - debugTrace("getPropValue() => '%s'" % str(origString)) - getPropDict[cfg] = os.path.getmtime(cfg) - val = origString.decode('utf-8').rstrip('\n') - debugTrace("getPropValue() => '%s'" % val) - getPropDict[cfg + ":" + nm] = val - return val - -def checkFileAge(full_path,number_of_days): - """ - return True if the file is >= number_of_days old from right now - """ - time_n_days_ago = time.time() - (number_of_days * 24 * 60 * 60) - stat = os.stat(full_path) - return time_n_days_ago >= stat.st_mtime - -def jumpTable(prefix, *args): - """ - Return a string consisting of a series of <a href='#prefix-xxx'>xxx</a>. - Include <font size='1'></font> around all of it. - """ - header = "<font size='1'>" - sep = "" - for table in args: - header = header + sep + "<a href='#" + prefix + "-" + table + "'>" + table + "</a> " - sep = " | " - header = header + "</font>" - return header - -def addFilenameHrefs(prefix, str): - """ - for each line in a list of filenames, change the last two elements of the path to an anchor. - """ - ret = "" - for line in str.splitlines(): - line = re.sub("/([^/]+)/([^/]+)$", '/\g<1>' + "/<a href='" + prefix + '\g<1>/\g<2>' + "'>" + '\g<2>' + "</a>", line) - ret = ret + line + "\n" - return ret - -def ifEmpty(str, defStr): - """ if a string is empty, return the defStr in its place """ - if str is None or str == "": - str = defStr - return str - -def isExe(fname): - """ check if a path exists and is executable """ - return os.path.exists(fname) and os.access(fname, os.X_OK) - -def replaceQuoteNewline(str): - return re.sub('"', "'", re.sub("\n", " ", str)) - -class MyHandler(http.server.BaseHTTPRequestHandler): - - def isServerUp(self): - """ - Check if the postgres server is up and running by calling pg_ctl and - looking for "server is running" (or "no server running"). - Then call ps -fu postgres and make sure we're not waiting on a master: - postgres 20815 20812 0 15:52 ? 00:00:00 postgres: startup process waiting for 000000010000000000000001 - """ - PGCTLPATH1 = "/usr/lib/postgresql/9.6/bin/pg_ctl" - PGCTLPATH2 = "/usr/lib/postgresql/9.5/bin/pg_ctl" - PGCTLPATH3 = "/opt/app/postgresql-9.5.2/bin/pg_ctl" - if isExe(PGCTLPATH1): - statusLines = readPipe(PGCTLPATH1 + " status -D /dbroot/pgdata/main/") - elif isExe(PGCTLPATH2): - statusLines = readPipe(PGCTLPATH2 + " status -D /dbroot/pgdata/main/") - else: - statusLines = readPipe(PGCTLPATH3 + " status -D /dbroot/pgdata/main/") - debugTrace("isServerUp(): statusLines = %s" % statusLines) - psLines = readPipe("ps -fu postgres") - debugTrace("isServerUp(): ps -fu postgres = %s" % psLines) - ret = len(statusLines) > 0 and re.search("server is running", statusLines, re.MULTILINE) and not re.search("startup process\\s+waiting", psLines, re.MULTILINE) - debugTrace("isServerUp(): returning = %s" % ret) - return ret - - def isRepmgrdUp(self): - """ - Check if the repmgrd server is up and running by calling "pgrep repmgrd" and - looking for a process id. - """ - statusLines = readPipe("pgrep repmgrd") - debugTrace("isServerUp(): statusLines = %s" % statusLines) - ret = len(statusLines) > 0 and re.search("[0-9]+", statusLines, re.MULTILINE) != None - debugTrace("isServerUp(): returning = %s" % ret) - return ret - - def isMaster(self): - """ - Check if the postgresql server is a master by asking the server if it is in recovery (meaning not a master) - """ - ret = None - con = None - try: - pwd = getCdfPropValue("postgres", True) - # debugTrace("using pwd=%s" % pwd) - con = psycopg2.connect(database = "postgres", user="postgres", password=pwd, host= HOST_NAME) - str = dbGetFirstRowOneValue(con, "select pg_is_in_recovery()") - debugTrace("pg_is_in_recovery() <= %s" % str) - ret = not str - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - debugTrace("isMaster(): returning = %s" % ret) - return ret - - def hasRepmgr(self): - """ - Check if the postgresql server is a master by asking the server if it is in recovery (meaning not a master) - """ - ret = None - con = None - try: - pwd = getCdfPropValue("postgres", True) - # debugTrace("using pwd=%s" % pwd) - con = psycopg2.connect(database = "postgres", user="postgres", password=pwd, host= HOST_NAME) - str = dbGetFirstRowOneValue(con, "select * from pg_database where datname = 'repmgr'") - debugTrace("repmgr database check() <= %s" % str) - ret = str - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - debugTrace("isMaster(): returning = %s" % ret) - return ret - - def isValidPgHost(self, host): - """ - Check a hostname against the list of nodes stored in the pgnodes CDF configuration file. - """ - pgnodes = getCdfPropValue("pgnodes", "").split('|') - ret = host in pgnodes - debugTrace("isValidPgHost(): looking for host='%s' in pgnodes='%s' => %s" % (host, str(pgnodes), ret)) - return ret - - def checkAuth(self): - """ - HTTP/1.1 401 Unauthorized - Date: Mon, 04 Feb 2014 16:50:53 GMT - WWW-Authenticate: Basic realm="WallyWorld" - - Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== - """ - pswd = getCdfPropValue("wgetpswd", True) - b64pswd = base64.b64encode(("pgaas:" + pswd).encode("ascii")) - basicPlusPswd = "Basic %s" % b64pswd.decode("ascii") - - if self.headers['Authorization'] == None: - return False - elif self.headers['Authorization'] == basicPlusPswd: - return True - else: - return False - - def pgStatus(self, *pgargs): - """ return a table(s), using the system database of postgres """ - return self.pgStatusDBx("postgres", *pgargs) - - def pgStatusDB(self, DB, *pgargs): - """ return a table(s), using the given database """ - return self.pgStatusDBx(DB, *pgargs) - - def pgStatusDBx(self, DB, *pgargs): - """ return a table(s), using the given database """ - debugTrace("pgStatusDBx(DB=" + DB + ")") - con = None - ret = None - try: - con = psycopg2.connect(database = DB, user="postgres", password=getCdfPropValue("postgres", True), host= HOST_NAME) - ret = getTableHtmls(con, DB, pgargs) - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - return ret - - def do_HEAD(self): - """Respond to a HEAD request.""" - self.doHEADandGET(False) - - def do_GET(self): - """Respond to a GET request.""" - self.doHEADandGET(True) - - def doHEADandGET(self, sendMsg): - resp = 400 - msg = "" - sendBinary = False - contentType = "text/plain" - global debugOn - - if self.path == "/statusall": - self.path = "/all/status/pgstatus" - elif self.path == "/pgstatusall": - self.path = "/pgstatus" - - if self.path == '/ro': - if os.path.isfile("/var/run/postgresql/force-ro-off"): - isrw = "FORCE-RO-OFF" - elif os.path.isfile("/var/run/postgresql/force-ro-on"): - isrw = "Secondary" - else: - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/ro: isrw returns %s" % isrw) - if re.match("Secondary", isrw) or re.match("Master", isrw): - resp = 200 - msg = "server is up" - else: - msg = "server is not up " + isrw - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/rw': - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/rw: isrw returns %s" % isrw) - if re.match("Master", isrw): - resp = 200 - msg = "master server is up" - elif re.match("Secondary", isrw): - msg = "non-master server is up" - else: - msg = "server is not up " + isrw - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/isrw': - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/isrw: returns %s" % isrw) - resp = 200 - msg = isrw - - elif self.path == '/healthcheck/status': - hs = readFile("/var/run/postgresql/check_cluster", "n/a") - debugTrace("/healthcheck/status: returns %s" % hs) - resp = 429 if hs == "n/a" else 200 - msg = '{ "output": "%s" }' % replaceQuoteNewline(hs) - - elif self.path == '/healthcheck/writablestatus': - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/rw: isrw returns %s" % isrw) - resp = 429 - if re.match("Master", isrw): - resp = 200 - msg = '{ "output": "master server is up" }' - elif re.match("Secondary", isrw): - msg = '{ "output": "non-master server is up" }' - else: - msg = '{ "output": "server is not up %s" }' % replaceQuoteNewline(isrw) - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/healthcheck/readonlystatus': - if os.path.isfile("/var/run/postgresql/force-ro-off"): - isrw = "FORCE-RO-OFF" - elif os.path.isfile("/var/run/postgresql/force-ro-on"): - isrw = "Secondary" - else: - isrw = readFile("/var/run/postgresql/isrw", "n/a") - debugTrace("/ro: isrw returns %s" % isrw) - resp = 429 - if re.match("Secondary", isrw) or re.match("Master", isrw): - resp = 200 - msg = '{ "output": "server is up" }' - else: - msg = '{ "output": "server is not up %s" }' % replaceQuoteNewline(isrw) - errTrace("/ro: isrw returns %s" % isrw) - - elif self.path == '/': - ui = readFile("/opt/app/pgaas/man/iDNS-responder.swagger.json", "n/a") - debugTrace("/: returns %s" % ui) - msg = ui - if ui != "n/a": - resp = 200 - contentType = "application/json" - - elif not self.checkAuth(): - resp = 401 - msg = "not authenticated" - - elif self.path == '/ismaster': - masterYes = self.isMaster() - msg = "" - if masterYes: - resp = 200 - msg = "master server" - else: - msg = "non-master server" - - elif self.path == '/issecondary': - masterYes = self.isMaster() - msg = "" - if not masterYes: - resp = 200 - msg = "secondary server" - else: - msg = "non-secondary server" - - elif self.path == '/ismaintenance': - msg = "" - if os.path.exists("/var/run/postgresql/inmaintenance"): - resp = 200 - msg = "in maintenance mode" - else: - msg = "not in maintenance mode" - - elif self.path == '/getpubkey': - try: - resp = 200 - msg = readFile(os.path.expanduser("~postgres/.ssh/id_rsa.pub")) - except: - traceback.print_exc() - resp = 404 - msg = "key does not exist" - - elif re.match("/getssh/", self.path): - # getssh/hostname - push ssh pub/private keys across - host = re.sub("^/getssh/", "", self.path) - debugTrace("#1: /getssh/ host='%s'" % host) - host = re.sub("[^a-zA-Z0-9_.-]", "", host) - debugTrace("#2: /getssh/ host='%s'" % host) - if self.isValidPgHost(host): - p = readPipe("scp -o StrictHostKeyChecking=no -i ~postgres/.ssh/id_rsa ~postgres/.ssh/id_rsa* postgres@" + host + ":.ssh/ 2>&1") - debugTrace("#3: /getssh/ to '%s' returns '%s'" % (host, p)) - msg = "OK " + p - resp = 200 - else: - msg = "NOT OK INVALID HOST" - resp = 404 - - elif re.match("/getcdf/", self.path): - # getcdf/hostname - push cdf.cfg file across - fi = "/opt/app/cdf/lib/cdf.cfg" - # make sure that the file exists and contains the encrypted postgres password - if re.search("postgres.x", readFile(fi, "n/a")) and re.search("repmgr.x", readFile(fi, "n/a")): - host = re.sub("^/getcdf/", "", self.path) - debugTrace("#1: /getcdf/ host='%s'" % host) - host = re.sub("[^a-zA-Z0-9_.-]", "", host) - debugTrace("#2: /getcdf/ host='%s'" % host) - if self.isValidPgHost(host): - p = readPipe("scp -o StrictHostKeyChecking=no -i ~postgres/.ssh/id_rsa " + fi + " postgres@" + host + ":/opt/app/cdf/lib/cdf.cfg 2>&1") - debugTrace("#3: /getcdf/ to '%s' returns '%s'" % (host, p)) - msg = "OK " + p - resp = 200 - else: - msg = "NOT OK INVALID HOST" - resp = 404 - else: - msg = "NOT OK YET" - resp = 404 - - elif self.path == '/hasrepmgr': - repmgrYes = self.hasRepmgr() - msg = "" - if repmgrYes: - resp = 200 - msg = "OK" - else: - msg = "NOT OK YET" - - elif self.path == '/status': - resp = 200 - contentType = "text/html" - isServerUp = self.isServerUp() - isRepmgrdUp = self.isRepmgrdUp() - isMaster = self.isMaster() - color = "green" if (isServerUp and isRepmgrdUp) else "yellow" if (isServerUp or isRepmgrdUp) else "red" - dashed = "solid" if isMaster else "dashed" - jump = jumpTable("status", "ps", "repmgr", "df", "uptime", "loadavg", "cpuinfo", "meminfo", "pgaas-failures", "pgaas-inst-report", "nslookup", "ip-addr-show", "who-br") - - msg = """<table style='border: 10px %s %s' width='100%%'><tr><td> - <b>isServerUp</b> %s - <b>isRepmgrdUp</b> %s - <b>isMaster</b> %s - <b>isrw</b> %s %s\n<br/> - %s - <h2><a name='status-ps'>ps</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-repmgr'>repmgr cluster show</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-df'>df</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-uptime'>uptime</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2>/proc/uptime%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-loadavg'>loadavg</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-cpuinfo'>cpuinfo</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-meminfo'>meminfo</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-pgaas-failures'>pgaas-failures</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-pgaas-inst-report'>pgaas.inst.report</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-nslookup'>nslookup</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-ip-addr-show'>ip addr</a>%s</h2>\n<pre>\n%s\n</pre>\n - <h2><a name='status-who-br'>who -br</a>%s</h2>\n<pre>\n%s\n</pre>\n - </td></tr></table>""" % (color, dashed, isServerUp, isRepmgrdUp, isMaster, - readFileHtml("/var/run/postgresql/isrw", "n/a"), - readPipeHtml("hostname -f"), jump, - topButton, readPipeHtml("ps -fu postgres"), - topButton, readPipeHtml("/opt/app/pgaas/bin/repmgrc cluster show"), - topButton, readPipeHtml("df -h"), - topButton, readPipeHtml("uptime", defStr="n/a"), - topButton, readFileHtml("/proc/uptime", defStr="n/a"), - topButton, readFileHtml("/proc/loadavg", defStr="n/a"), - topButton, readFileHtml("/proc/cpuinfo", defStr="n/a"), - topButton, readFileHtml("/proc/meminfo", defStr="n/a"), - topButton, readFileHtml("/tmp/pgaas-failures", defStr="n/a"), - topButton, readFileHtml("/tmp/pgaas.inst.report", defStr="n/a"), - topButton, readPipeHtml("nslookup $(hostname -f)", defStr="n/a"), - topButton, readPipeHtml("ip addr show", defStr="n/a"), - topButton, readPipeHtml("who -br", defStr="n/a")) - - elif self.path == '/stoplight': - isServerUp = self.isServerUp() - isRepmgrdUp = self.isRepmgrdUp() - isMaster = self.isMaster() - color = "green" if (isServerUp and isRepmgrdUp) else "yellow" if (isServerUp or isRepmgrdUp) else "red" - masterSecondary = "master" if isMaster else "secondary" - sendBinary = True - contentType = "image/gif" - msg = readFileBinary("/opt/app/postgresql/lib/gif/stoplight-" + masterSecondary + "-" + color + ".gif", "") - - elif re.match("/perdb-", self.path): - # /perdb- - rest = re.sub("^/perdb-", "", self.path) - debugTrace("#1: /perdb- others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - debugTrace("#2: /perdb- rest='%s'" % rest) - pgothers = [ x for x in rest.split('-') if x in validPerDbTables ] - resp = 200 - contentType = "text/html" - con = None - try: - pwd = getCdfPropValue("postgres", True) - con = psycopg2.connect(database = "postgres", user="postgres", password=pwd, host= HOST_NAME) - databases = dbGetFirstColumn(con, "select datname from pg_database") - debugTrace("after select datname from pg_database") - databases[:] = [DB for DB in databases if not re.match("template[0-9]", DB)] - msg = msg + jumpTable("db", *databases) + "<br/>" - for DB in databases: - debugTrace("looking at DB=" + DB) - msg = msg + "<h1><a name='db-" + DB + "'>" + DB + "</a>" + topButton + "</h1>\n" - msg = msg + jumpTable(DB + "-table", *pgothers) - msg = msg + self.pgStatusDB(DB, *pgothers) - - except psycopg2.DatabaseError as e: - errTrace('Database Error %s' % e) - msg = "DB is down" - - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - finally: - if con is not None: - con.close() - - elif self.path == '/pgstatus': - tables = [ "pg_stat_activity", "pg_stat_archiver", "pg_stat_bgwriter", "pg_stat_database", "pg_stat_database_conflicts", "pg_stat_user_tables", "pg_stat_user_indexes", "pg_statio_user_tables", "pg_statio_user_indexes", "pg_statio_user_sequences", "pg_roles", "pg_database", "pg_tables", "pg_namespace", "pg_roles", "pg_group" ] - header = jumpTable("postgres-table", *tables) - msg = self.pgStatus(*tables) - if msg is not None: - contentType = "text/html" - resp = 200 - msg = header + msg - - elif self.path == '/pg_stat_activity': - msg = self.pgStatus("pg_stat_activity") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_archiver': - msg = self.pgStatus("pg_stat_archiver") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_bgwriter': - msg = self.pgStatus("pg_stat_bgwriter") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_database': - msg = self.pgStatus("pg_stat_database") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_database_conflicts': - msg = self.pgStatus("pg_stat_database_conflicts") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_user_tables': - msg = self.pgStatus("pg_stat_user_tables") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_stat_user_indexes': - msg = self.pgStatus("pg_stat_user_indexes") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_statio_user_tables': - msg = self.pgStatus("pg_statio_user_tables") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_statio_user_indexes': - msg = self.pgStatus("pg_statio_user_indexes") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_statio_user_sequences': - msg = self.pgStatus("pg_statio_user_sequences") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_roles': - msg = self.pgStatus("pg_roles") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_database': - msg = self.pgStatus("pg_database") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_tables': - msg = self.pgStatus("pg_tables") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_namespace': - msg = self.pgStatus("pg_namespace") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif self.path == '/pg_group': - msg = self.pgStatus("pg_group") - if msg is not None: - contentType = "text/html" - resp = 200 - - elif re.match("/all/", self.path) or re.match("/small/", self.path): - if re.match("/small/", self.path): - height = 40 - else: - height = 400 - # /all/others - rest = re.sub("^/all/", "", self.path) - rest = re.sub("^/small/", "", self.path) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - debugTrace("/all/ rest='%s'" % rest) - others = rest.split('/') - try: - resp = 200 - contentType = "text/html" - pgnodes = getCdfPropValue("pgnodes", "").split('|') - msg = msg + jumpTable("node", *pgnodes) - for node in pgnodes: - hnode = html.escape(node) - msg = msg + "<h2><a name='node-" + hnode + "'>" + hnode + "</a>" + topButton + "</h2>\n" - msg = msg + jumpTable(hnode + "-other", *others) - for other in others: - msg = msg + "<h3><a name='" + hnode + "-other-" + other + "'>" + other + "</a>" + topButton + "</h3>\n" - msg = msg + "<iframe src='http://" + hnode + ":" + str(PORT_NUMBER) + "/" + other + "' frameborder='1' scrolling='yes' height='" + str(height) + "' width='1200'></iframe>\n" - except Exception as e: - traceback.print_exc() - errTrace(str(e)) - - # ATT-ONLY CODE BEGIN - elif self.path == '/swmstatus': - resp = 200 - contentType = "text/html" - msg = "<pre>\n%s\n</pre>" % readPipeHtml("set -x;sed -n '/^STARTING/,/^ENDING/p' /opt/app/aft/aftswmnode/stage/*/com/att/ecomp/dcae/storage/pgaas/*/*/proc_out") - # ATT-ONLY CODE END - - elif self.path == '/debugon': - msg = "ON" - resp = 200 - debugOn = True - - elif self.path == '/debugoff': - msg = "OFF" - resp = 200 - debugOn = False - - elif self.path == '/log' or self.path == '/log/': - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (self.path, addFilenameHrefs("/log/", readPipeHtml("ls -l /opt/logs/dcae/postgresql/*/*"))) - resp = 200 - contentType = "text/html" - - elif self.path == '/mlog' or self.path == '/mlog/': - # /opt/app/dcae-controller-service-common-vm-manager/logs - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (self.path, addFilenameHrefs("/mlog/", readPipeHtml("ls -l /opt/app/dcae-controller-service-common-vm-manager/logs/*"))) - resp = 200 - contentType = "text/html" - - elif self.path == '/tmp' or self.path == '/tmp/': - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (self.path, addFilenameHrefs("/tmp/", readPipeHtml("ls -l /tmp/*"))) - resp = 200 - contentType = "text/html" - - elif re.match("/log/", self.path): - # /log/dir/path - rest = re.sub("^/log/", "", self.path) - debugTrace("#1: /log/ others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - rest = re.sub("/[.][.]/", "", rest) - debugTrace("#2: /log/ rest='%s'" % rest) - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (rest, ifEmpty(readFileOrGzHtml("/opt/logs/dcae/postgresql/" + rest, "n/a"), "<i>empty</i>")) - resp = 200 - contentType = "text/html" - - elif re.match("/mlog/", self.path): - # /log/dir/path - rest = re.sub("^/mlog/", "", self.path) - debugTrace("#1: /mlog/ others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - rest = re.sub("/[.][.]/", "", rest) - rest = re.sub("^logs/", "", rest) - debugTrace("#2: /mlog/ rest='%s'" % rest) - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (rest, ifEmpty(readFileOrGzHtml("/opt/app/dcae-controller-service-common-vm-manager/logs/" + rest, "n/a"), "<i>empty</i>")) - resp = 200 - contentType = "text/html" - - elif re.match("/tmp/", self.path): - # /log/dir/path - rest = re.sub("^/tmp/", "", self.path) - debugTrace("#1: /tmp/ others='%s'" % rest) - rest = re.sub("[^a-zA-Z0-9_./-]", "", rest) - rest = re.sub("/[.][.]/", "", rest) - rest = re.sub("^tmp/", "", rest) - debugTrace("#2: /tmp/ rest='%s'" % rest) - msg = "<h2>%s</h2><pre>\n%s\n</pre>" % (rest, ifEmpty(readFileOrGzHtml("/tmp/" + rest, "n/a"), "<i>empty</i>")) - resp = 200 - contentType = "text/html" - - elif self.path == '/oldro': - serverYes = self.isServerUp() - if serverYes: - resp = 200 - msg = "server is up" - else: - msg = "server is not up" - - elif self.path == '/oldrw': - serverYes = self.isServerUp() - masterYes = self.isMaster() - msg = "" - if serverYes: - if masterYes: - resp = 200 - msg = "master server is up" - elif masterYes is not None: - msg = "non-master server is up" - else: - msg = "master status is up, but not answering" - else: - if masterYes: - msg = "status is down, but responded as master server" - elif masterYes is not None: - msg = "status is down, but responded as non-master" - else: - msg = "status is down, server is not up" - - elif self.path == "/help": - resp = 200 - contentType = "text/html" - msg = """<pre> - <a href='/statusall'>statusall</a> == all/status/pgstatus - <a href='/ro'>ro</a> == iDNS readonly - <a href='/rw'>rw</a> == iDNS readwrite - <a href='/isrw'>isrw</a> == /var/run/postgresql/isrw - <a href='/ismaster'>ismaster</a> == is master - <a href='/issecondary'>issecondary</a> == is secondary - <a href='/ismaintenance'>ismaintenance</a> == is in maintenance mode - <a href='/healthcheck/status'>healthcheck/status</a> == Consul healthcheck - <a href='/healthcheck/writablestatus'>healthcheck/writablestatus</a> == Consul writable healthcheck - <a href='/healthcheck/readonlystatus'>healthcheck/readonlystatus</a> == Consul readonly healthcheck - <a href='/getpubkey'>getpubkey</a> == retrieve public key - <a href='/hasrepmgr'>hasrepmgr</a> == repmgr id and database are set up - <a href='/status'>status</a> == lots of info - <a href='/perdb-pg_tables-pg_indexes-pg_views'>perdb</a>-{<a href='/perdb-pg_tables'>pg_tables</a>-<a href='/perdb-pg_indexes'>pg_indexes</a>-<a href='/perdb-pg_views'>pg_views</a>} == info per DB - <a href='/pgstatus'>pgstatus</a> == lots of database info - <a href='/pg_stat_activity'>pg_stat_activity</a>, <a href='/pg_stat_archiver'>pg_stat_archiver</a>, <a href='/pg_stat_bgwriter'>pg_stat_bgwriter</a>, - <a href='/pg_stat_database'>pg_stat_database</a>, <a href='/pg_stat_database_conflicts'>pg_stat_database_conflicts</a>, <a href='/pg_stat_user_tables'>pg_stat_user_tables</a>, - <a href='/pg_stat_user_indexes'>pg_stat_user_indexes</a>, <a href='/pg_statio_user_tables'>pg_statio_user_tables</a>, <a href='/pg_statio_user_indexes'>pg_statio_user_indexes</a>, - <a href='/pg_statio_user_sequences'>pg_statio_user_sequences</a>, - <a href='/pg_roles'>pg_roles</a>, <a href='/pg_database'>pg_database</a>, - <a href='/pg_tables'>pg_tables</a>, <a href='/pg_namespace'>pg_namespace</a>, - <a href='/pg_group'>pg_group</a>, - <a href='/swmstatus'>swm proc_out files</a> - <a href='/log'>log</a> == ls -l logs - log/foo == log foo - <a href='/mlog'>mlog</a> == ls -l manager logs - mlog/foo == mlog foo - <a href='/tmp'>tmp</a> == ls -l /tmp - </pre>""" - else: - resp = 404 - msg = "path does not exist" - - # TODO == encode msg when binary - if sendBinary: - debugTrace("%s: Returning %d/%d/%s" % (self.path, resp, len(msg), "--binary--")) - else: - debugTrace("%s: Returning %d/%d/%s" % (self.path, resp, len(msg), msg)) - traceMsg("- %s - \"%s %s %s\" %d %d" % (self.client_address[0], self.command, self.path, self.request_version, resp, len(msg))) - self.send_response(resp) - if resp == 401: - self.send_header('WWW-Authenticate', 'Basic realm="PGaaS"') - self.send_header("Content-type", contentType) - self.end_headers() - if sendMsg: - if msg is None: - msg = "" - if sendBinary: - self.wfile.write(msg) - else: - self.wfile.write((msg + "\n").encode("utf-8")) - sys.stderr.flush() - -""" -database utility functions -""" - -# def dbGetMap(con, cmd, args=[], skipTrace=False): -# def dbGetOneRowMap(con, cmd, args=[], skipTrace=False): - -def dbGetFirstRowOneValue(con, cmd, args=[], skipTrace=False): - """ - Do a select and return a single value from the first row - """ - row = dbGetFirstRow(con, cmd, args, skipTrace) - debugTrace("row=" + str(row)) - if row is not None and len(row) > 0: - return row[0] - return None - -def dbGetFirstRow(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the values from the first row - """ - cursor = dbExecute(con, cmd, args, skipTrace) - return cursor.fetchone() - -def dbGetFirstColumn(con, cmd, args=[], skipTrace=False): - """ - Do a select and return the first column's value from each row - """ - ret = [] - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret.append(col) - break - return ret - -def dbGetFirstColumnAsMap(con, cmd, args=[], skipTrace=False, val=1): - """ - Do a select and return the first column's value from each row - """ - ret = {} - cursor = dbExecute(con, cmd, args, skipTrace) - for row in cursor: - for col in row: - ret[col] = val - break - return ret - -def dumpTable(con, tableName, max=-1): - """ - If being extra verbose, print out the entire table - """ - if verbose < 2: - return - traceOutput = sys.stderr if testOn else openLogFile("/opt/logs/dcae/postgresql/idns/debug.log") - print("================ " + tableName + " ================", file=traceOutput) - - cols = dbGetFirstColumn(con, "select column_name from information_schema.columns where table_name='" + tableName + "'", skipTrace=True) - print("num", end="|", file=traceOutput) - for col in cols: - print(col, end="|", file=traceOutput) - print("", file=traceOutput) - - if max > -1: - cursor = dbExecute(con, "select * from " + tableName + " limit " + str(max), skipTrace=True) - else: - cursor = dbExecute(con, "select * from " + tableName, skipTrace=True) - i = 0 - for row in cursor: - print("%d" % i, end="|", file=traceOutput) - i += 1 - for col in row: - print("%s" % (col), end="|", file=traceOutput) - print("", file=traceOutput) - print("================================================", file=traceOutput) - -def getTableHtmls(con, DB, tableNames): - """ - Retrieve a dump of all specified tables, in HTML format - """ - ret = "" - for tn in tableNames: - ret = ret + getTableHtml(con, DB, tn) - return ret - -def getTableHtml(con, DB, tableName, max=-1): - """ - Retrieve a dump of a given table, in HTML format - """ - # errTrace("getting %s" % str(tableName)) - ret = "<h2><a name='" + DB + "-table-" + tableName + "'>" + DB + " " + tableName + "</a>" + topButton + "</h2>\n" - ret = ret + "<table border='1'>\n" - # ret = ret + "<tr><th colspan='" + str(len(cols)+1) + "'>" + tableName + "</th></tr>\n" - cols = dbGetFirstColumn(con, "select column_name from information_schema.columns where table_name='" + tableName + "'", skipTrace=True) - - ret = ret + "<tr><th>num</th>" - for col in cols: - ret = ret + "<th>" + str(col) + "</th>" - ret = ret + "</tr>\n" - - if max > -1: - cursor = dbExecute(con, "select * from " + tableName + " limit " + str(max), skipTrace=True) - else: - cursor = dbExecute(con, "select * from " + tableName, skipTrace=True) - i = 0 - for row in cursor: - ret = ret + "<tr><th>" + str(i) + "</th>" - i = i + 1 - for col in row: - ret = ret + "<td>" + str(col) + "</td>" - ret = ret + "</tr>\n" - ret = ret + "</table>\n" - return ret - -def dbExecute(con, statement, args=[], skipTrace=False): - """ - Create a cursor, instantiate the arguments into a statement, trace print the statement, and execute the statement. - Return the cursor - """ - cursor = con.cursor() - stmt = cursor.mogrify(statement, args); - if not skipTrace: - debugTrace("executing:" + str(stmt)) - cursor.execute(stmt) - if not skipTrace: - debugTrace("statusmessage=" + cursor.statusmessage + ", rowcount=" + str(cursor.rowcount)) - return cursor - -class HTTPServerIPv6(http.server.HTTPServer): - address_family = socket.AF_INET6 - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description="Respond to HTTP requests") - parser.add_argument("-d","--debug",help="turn on debugging",action="store_true") - parser.add_argument("-t","--test",help="turn on test mode",action="store_true") - parser.add_argument("-H", "--host", type=str, help="Hostname, defaults to '%s'" % DEF_HOST_NAME, - default=DEF_HOST_NAME) - parser.add_argument("-P", "--port", type=int, help="Port to listen on, defaults to '%d'" % DEF_PORT_NUMBER, - default=DEF_PORT_NUMBER) - args = parser.parse_args() - - global debugOn, testOn, HOST_NAME, PORT_NUMBER - debugOn = args.debug - testOn = args.test - HOST_NAME = args.host - PORT_NUMBER = args.port - - if not debugOn: - sys.stderr = openLogFile("/opt/logs/dcae/postgresql/idns/error.log") - - # server_class = http.server.HTTPServer - # httpd = server_class(("0.0.0.0", PORT_NUMBER), MyHandler) - server_class = HTTPServerIPv6 - httpd = server_class(("", PORT_NUMBER), MyHandler) - errTrace("Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)) - try: - httpd.serve_forever() - except KeyboardInterrupt: - pass - httpd.server_close() - errTrace("Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)) diff --git a/pgaas/src/stage/opt/app/pgaas/lib/init-logger.cfg b/pgaas/src/stage/opt/app/pgaas/lib/init-logger.cfg deleted file mode 100644 index e48183c..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/init-logger.cfg +++ /dev/null @@ -1,40 +0,0 @@ -# You may change this file while your program is running and CommonLogger will automatically reconfigure accordingly. -# Changing these parameters may leave old log files lying around. - - -#--- Parameters that apply to all logs -# -# rotateMethod: time or size -#... Note: the following two parameters apply only when rotateMethod=time -# timeRotateIntervalType: S, M, H, D, W0 - W6, or midnight (seconds, minutes, hours, days, weekday (0=Monday), or midnight UTC) -# timeRotateInterval: >= 1 (1 means every timeRotateIntervalType, 2 every other, 3 every third, etc.) -#... Note: the following parameter applies only when rotateMethod=size -# sizeMaxBytes: >= 0 (0 means no limit, else maximum filesize in Bytes) -# backupCount: >= 0 (Number of rotated backup files to retain. If rotateMethod=time, 0 retains *all* backups. If rotateMethod=size, 0 retains *no* backups.) -# -rotateMethod = none -# timeRotateIntervalType = midnight -# timeRotateInterval = 1 -# sizeMaxBytes = 0 -# backupCount = 6 - - -#--- Parameters that define log filenames and their initial LogLevel threshold -#... Note: CommonLogger will exit if your process does not have permission to write to the file. -# - -error = /opt/logs/dcae/postgresql/init/error.log -errorLogLevel = WARN -errorStyle = error - -metrics = /opt/logs/dcae/postgresql/init/metrics.log -metricsLogLevel = INFO -metricsStyle = metrics - -audit = /opt/logs/dcae/postgresql/init/audit.log -auditLogLevel = INFO -auditStyle = audit - -debug = /opt/logs/dcae/postgresql/init/debug.log -debugLogLevel = DEBUG -debugStyle = debug diff --git a/pgaas/src/stage/opt/app/pgaas/lib/makefile b/pgaas/src/stage/opt/app/pgaas/lib/makefile deleted file mode 100644 index ea58dba..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/makefile +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/lib - mkdir -p $(STAGEDIR)/$(DISTPATH)/lib - for i in *; do \ - case $$i in \ - [!C]*.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/lib/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/lib/$$i; \ - fi; \ - ;; \ - esac; \ - done - diff --git a/pgaas/src/stage/opt/app/pgaas/lib/pgaas.cfg b/pgaas/src/stage/opt/app/pgaas/lib/pgaas.cfg deleted file mode 100644 index e28d5e6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/pgaas.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -#### -#### PostgreSQL as a Service Configuration Parameters -#### - -db_directory=/dbroot/pgdata/main -# db_configuration= -# pg_bin_directory= - -dcae_admin_db_hostname=localhost -dcae_admin_db_databasename=postgres -dcae_admin_db_username=postgres -dcae_admin_db_verbosity=1 -dcae_admin_db_jsontop="['vmConfiguration']" -dcae_admin_db_errors_file=/opt/logs/dcae/postgresql/init/error.log -dcae_admin_db_trace_file=/opt/logs/dcae/postgresql/init/trace.log -dcae_admin_db_common_logger_config=/opt/app/pgaas/lib/init-logger.cfg -# skip_configuration_file= diff --git a/pgaas/src/stage/opt/app/pgaas/lib/profile.additions b/pgaas/src/stage/opt/app/pgaas/lib/profile.additions deleted file mode 100644 index ad9decf..0000000 --- a/pgaas/src/stage/opt/app/pgaas/lib/profile.additions +++ /dev/null @@ -1,10 +0,0 @@ - -if [ -d /opt/app/postgresql-9.5.2 ] -then PGDIR=/opt/app/postgresql-9.5.2 -elif [ -d /usr/lib/postgresql/9.6 ] -then PGDIR=/usr/lib/postgresql/9.6 -elif [ -d /usr/lib/postgresql/9.5 ] -then PGDIR=/usr/lib/postgresql/9.5 -else echo PostgreSQL bin directory not found -fi -export PATH="$PGDIR/bin:/opt/app/cdf/bin:/opt/app/pgaas/bin:$PATH" diff --git a/pgaas/src/stage/opt/app/pgaas/main/makefile b/pgaas/src/stage/opt/app/pgaas/main/makefile deleted file mode 100644 index ca8af9a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/makefile +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -all: - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -stage: - rm -rf $(STAGEDIR)/$(DISTPATH)/main - mkdir -p $(STAGEDIR)/$(DISTPATH)/main - for i in *; do \ - case $$i in \ - *.py ) \ - j=`basename $$i .py`; \ - cp $$i $(STAGEDIR)/$(DISTPATH)/main/$$j; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/main/$$j; \ - ;; \ - makefile | *~ ) ;; \ - * ) \ - if [ -f $$i ]; then \ - cp $$i $(STAGEDIR)/$(DISTPATH)/main/$$i; \ - chmod a+x $(STAGEDIR)/$(DISTPATH)/main/$$i; \ - fi; \ - ;; \ - esac; \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/main/pg_hba.conf.orig b/pgaas/src/stage/opt/app/pgaas/main/pg_hba.conf.orig deleted file mode 100644 index 7bf51c1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/pg_hba.conf.orig +++ /dev/null @@ -1,127 +0,0 @@ -# PostgreSQL Client Authentication Configuration File -# =================================================== -# -# Refer to the "Client Authentication" section in the PostgreSQL -# documentation for a complete description of this file. A short -# synopsis follows. -# -# This file controls: which hosts are allowed to connect, how clients -# are authenticated, which PostgreSQL user names they can use, which -# databases they can access. Records take one of these forms: -# -# local DATABASE USER METHOD [OPTIONS] -# host DATABASE USER ADDRESS METHOD [OPTIONS] -# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] -# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] -# -# (The uppercase items must be replaced by actual values.) -# -# The first field is the connection type: "local" is a Unix-domain -# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, -# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a -# plain TCP/IP socket. -# -# DATABASE can be "all", "sameuser", "samerole", "replication", a -# database name, or a comma-separated list thereof. The "all" -# keyword does not match "replication". Access to replication -# must be enabled in a separate record (see example below). -# -# USER can be "all", a user name, a group name prefixed with "+", or a -# comma-separated list thereof. In both the DATABASE and USER fields -# you can also write a file name prefixed with "@" to include names -# from a separate file. -# -# ADDRESS specifies the set of hosts the record matches. It can be a -# host name, or it is made up of an IP address and a CIDR mask that is -# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that -# specifies the number of significant bits in the mask. A host name -# that starts with a dot (.) matches a suffix of the actual host name. -# Alternatively, you can write an IP address and netmask in separate -# columns to specify the set of hosts. Instead of a CIDR-address, you -# can write "samehost" to match any of the server's own IP addresses, -# or "samenet" to match any address in any subnet that the server is -# directly connected to. -# -# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", -# "ident", "peer", "pam", "ldap", "radius" or "cert". Note that -# "password" sends passwords in clear text; "md5" is preferred since -# it sends encrypted passwords. -# -# OPTIONS are a set of options for the authentication in the format -# NAME=VALUE. The available options depend on the different -# authentication methods -- refer to the "Client Authentication" -# section in the documentation for a list of which options are -# available for which authentication methods. -# -# Database and user names containing spaces, commas, quotes and other -# special characters must be quoted. Quoting one of the keywords -# "all", "sameuser", "samerole" or "replication" makes the name lose -# its special character, and just match a database or username with -# that name. -# -# This file is read on server startup and when the postmaster receives -# a SIGHUP signal. If you edit the file on a running system, you have -# to SIGHUP the postmaster for the changes to take effect. You can -# use "pg_ctl reload" to do that. - -# Put your actual configuration here -# ---------------------------------- -# -# If you want to allow non-local connections, you need to add more -# "host" records. In that case you will also need to make PostgreSQL -# listen on a non-local interface via the listen_addresses -# configuration parameter, or via the -i or -h command line switches. - -### @authcomment@ -### -### # TYPE DATABASE USER ADDRESS METHOD -### -### @remove-line-for-nolocal@# "local" is for Unix domain socket connections only -### @remove-line-for-nolocal@local all all @authmethodlocal@ -### # IPv4 local connections: -### host all all 127.0.0.1/32 @authmethodhost@ -### # IPv6 local connections: -### host all all ::1/128 @authmethodhost@ -### # Allow replication connections from localhost, by a user with the -### # replication privilege. -### @remove-line-for-nolocal@#local replication @default_username@ @authmethodlocal@ -### #host replication @default_username@ 127.0.0.1/32 @authmethodhost@ -### #host replication @default_username@ ::1/128 @authmethodhost@ - -# DO NOT DISABLE! -# If you change this first entry you will need to make sure that the -# database superuser can access the database using some other method. -# Noninteractive access to all databases is required during automatic -# maintenance (custom daily cronjobs, replication, and similar tasks). -# -# Database administrative login by Unix domain socket -local all postgres peer - -# TYPE DATABASE USER ADDRESS METHOD - -# DCAE IPv4/IPv6 remote connections: -host all all 0.0.0.0/0 md5 -host all all ::/0 md5 - -# "local" is for Unix domain socket connections only -local all all peer -# IPv4 local connections: -host all all 127.0.0.1/32 md5 -# IPv6 local connections: -host all all ::1/128 md5 -# Allow replication connections from localhost, by a user with the -# replication privilege. -# local replication postgres peer -# host replication postgres 127.0.0.1/32 md5 -# host replication postgres 0.0.0.0/0 md5 -# host replication postgres ::1/128 md5 - -local replication repmgr md5 -host replication repmgr 127.0.0.1/32 md5 -host replication repmgr 0.0.0.0/0 md5 -host replication repmgr ::1/128 md5 - -local repmgr repmgr md5 -host repmgr repmgr 127.0.0.1/32 md5 -host repmgr repmgr 0.0.0.0/0 md5 -host repmgr repmgr ::1/128 md5 diff --git a/pgaas/src/stage/opt/app/pgaas/main/pg_ident.conf b/pgaas/src/stage/opt/app/pgaas/main/pg_ident.conf deleted file mode 100644 index a5870e6..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/pg_ident.conf +++ /dev/null @@ -1,42 +0,0 @@ -# PostgreSQL User Name Maps -# ========================= -# -# Refer to the PostgreSQL documentation, chapter "Client -# Authentication" for a complete description. A short synopsis -# follows. -# -# This file controls PostgreSQL user name mapping. It maps external -# user names to their corresponding PostgreSQL user names. Records -# are of the form: -# -# MAPNAME SYSTEM-USERNAME PG-USERNAME -# -# (The uppercase quantities must be replaced by actual values.) -# -# MAPNAME is the (otherwise freely chosen) map name that was used in -# pg_hba.conf. SYSTEM-USERNAME is the detected user name of the -# client. PG-USERNAME is the requested PostgreSQL user name. The -# existence of a record specifies that SYSTEM-USERNAME may connect as -# PG-USERNAME. -# -# If SYSTEM-USERNAME starts with a slash (/), it will be treated as a -# regular expression. Optionally this can contain a capture (a -# parenthesized subexpression). The substring matching the capture -# will be substituted for \1 (backslash-one) if present in -# PG-USERNAME. -# -# Multiple maps may be specified in this file and used by pg_hba.conf. -# -# No map names are defined in the default configuration. If all -# system user names and PostgreSQL user names are the same, you don't -# need anything in this file. -# -# This file is read on server startup and when the postmaster receives -# a SIGHUP signal. If you edit the file on a running system, you have -# to SIGHUP the postmaster for the changes to take effect. You can -# use "pg_ctl reload" to do that. - -# Put your actual configuration here -# ---------------------------------- - -# MAPNAME SYSTEM-USERNAME PG-USERNAME diff --git a/pgaas/src/stage/opt/app/pgaas/main/postgresql.conf.orig b/pgaas/src/stage/opt/app/pgaas/main/postgresql.conf.orig deleted file mode 100644 index cb4d13a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/main/postgresql.conf.orig +++ /dev/null @@ -1,655 +0,0 @@ -# ----------------------------- -# PostgreSQL configuration file -# ----------------------------- -# -# This file consists of lines of the form: -# -# name = value -# -# (The "=" is optional.) Whitespace may be used. Comments are introduced with -# "#" anywhere on a line. The complete list of parameter names and allowed -# values can be found in the PostgreSQL documentation. -# -# The commented-out settings shown in this file represent the default values. -# Re-commenting a setting is NOT sufficient to revert it to the default value; -# you need to reload the server. -# -# This file is read on server startup and when the server receives a SIGHUP -# signal. If you edit the file on a running system, you have to SIGHUP the -# server for the changes to take effect, or use "pg_ctl reload". Some -# parameters, which are marked below, require a server shutdown and restart to -# take effect. -# -# Any parameter can also be given as a command-line option to the server, e.g., -# "postgres -c log_connections=on". Some parameters can be changed at run time -# with the "SET" SQL command. -# -# Memory units: kB = kilobytes Time units: ms = milliseconds -# MB = megabytes s = seconds -# GB = gigabytes min = minutes -# TB = terabytes h = hours -# d = days - - -#------------------------------------------------------------------------------ -# FILE LOCATIONS -#------------------------------------------------------------------------------ - -# The default values of these variables are driven from the -D command-line -# option or PGDATA environment variable, represented here as ConfigDir. - -data_directory = '/dbroot/pgdata/main' # for DCAE -#data_directory = 'ConfigDir' # use data in another directory - # (change requires restart) -hba_file = '%CFGDIR%/main/pg_hba.conf' # for DCAE -#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file - # (change requires restart) -ident_file = '%CFGDIR%/main/pg_ident.conf' # for DCAE -#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file - # (change requires restart) - -# If external_pid_file is not explicitly set, no extra PID file is written. -external_pid_file = '/var/run/postgresql/main.pid' # for DCAE -#external_pid_file = '' # write an extra PID file - # (change requires restart) - - -#------------------------------------------------------------------------------ -# CONNECTIONS AND AUTHENTICATION -#------------------------------------------------------------------------------ - -# - Connection Settings - - -# DCAE -- for 1607 IST30, set to '*' to allow remote connections -listen_addresses = '*' # for DCAE - -#listen_addresses = 'localhost' # what IP address(es) to listen on; - # comma-separated list of addresses; - # defaults to 'localhost'; use '*' for all - # (change requires restart) -#port = 5432 # (change requires restart) -#max_connections = 100 # (change requires restart) -# Note: Increasing max_connections costs ~400 bytes of shared memory per -# connection slot, plus lock space (see max_locks_per_transaction). -#superuser_reserved_connections = 3 # (change requires restart) -unix_socket_directories = '/var/run/postgresql,/tmp' # for DCAE -#unix_socket_directories = '/tmp' # comma-separated list of directories - # (change requires restart) -#unix_socket_group = '' # (change requires restart) -#unix_socket_permissions = 0777 # begin with 0 to use octal notation - # (change requires restart) -#bonjour = off # advertise server via Bonjour - # (change requires restart) -#bonjour_name = '' # defaults to the computer name - # (change requires restart) - -# - Security and Authentication - - -#authentication_timeout = 1min # 1s-600s -ssl = true # for DCAE -#ssl = off # (change requires restart) -#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers - # (change requires restart) -#ssl_prefer_server_ciphers = on # (change requires restart) -#ssl_ecdh_curve = 'prime256v1' # (change requires restart) -ssl_cert_file = '%CFGDIR%/lib/ssl-cert-snakeoil.pem' # for DCAE -#ssl_cert_file = 'server.crt' # (change requires restart) -ssl_key_file = '%CFGDIR%/lib/ssl-cert-snakeoil.key' # for DCAE -#ssl_key_file = 'server.key' # (change requires restart) -#ssl_ca_file = '' # (change requires restart) -#ssl_crl_file = '' # (change requires restart) -#password_encryption = on -#db_user_namespace = off -#row_security = on - -# GSSAPI using Kerberos -#krb_server_keyfile = '' -#krb_caseins_users = off - -# - TCP Keepalives - -# see "man 7 tcp" for details - -#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; - # 0 selects the system default -#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; - # 0 selects the system default -#tcp_keepalives_count = 0 # TCP_KEEPCNT; - # 0 selects the system default - - -#------------------------------------------------------------------------------ -# RESOURCE USAGE (except WAL) -#------------------------------------------------------------------------------ - -# - Memory - - -#shared_buffers = 32MB # min 128kB - # (change requires restart) -#huge_pages = try # on, off, or try - # (change requires restart) -#temp_buffers = 8MB # min 800kB -#max_prepared_transactions = 0 # zero disables the feature - # (change requires restart) -# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory -# per transaction slot, plus lock space (see max_locks_per_transaction). -# It is not advisable to set max_prepared_transactions nonzero unless you -# actively intend to use prepared transactions. -#work_mem = 4MB # min 64kB -#maintenance_work_mem = 64MB # min 1MB -#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem -#max_stack_depth = 2MB # min 100kB -#dynamic_shared_memory_type = posix # the default is the first option - # supported by the operating system: - # posix - # sysv - # windows - # mmap - # use none to disable dynamic shared memory - -# - Disk - - -#temp_file_limit = -1 # limits per-session temp file space - # in kB, or -1 for no limit - -# - Kernel Resource Usage - - -#max_files_per_process = 1000 # min 25 - # (change requires restart) -#shared_preload_libraries = '' # (change requires restart) - -# - Cost-Based Vacuum Delay - - -#vacuum_cost_delay = 0 # 0-100 milliseconds -#vacuum_cost_page_hit = 1 # 0-10000 credits -#vacuum_cost_page_miss = 10 # 0-10000 credits -#vacuum_cost_page_dirty = 20 # 0-10000 credits -#vacuum_cost_limit = 200 # 1-10000 credits - -# - Background Writer - - -#bgwriter_delay = 200ms # 10-10000ms between rounds -#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round -#bgwriter_lru_multiplier = 2.0 # 0-10.0 multipler on buffers scanned/round - -# - Asynchronous Behavior - - -#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching -#max_worker_processes = 8 - - -#------------------------------------------------------------------------------ -# WRITE AHEAD LOG -#------------------------------------------------------------------------------ - -# - Settings - - -# TLH - this is where we do WAL settings -wal_level = hot_standby # minimal, archive, hot_standby, or logical - # (change requires restart) -#fsync = on # turns forced synchronization on or off -#synchronous_commit = on # synchronization level; - # off, local, remote_write, or on -#wal_sync_method = fsync # the default is the first option - # supported by the operating system: - # open_datasync - # fdatasync (default on Linux) - # fsync - # fsync_writethrough - # open_sync -#full_page_writes = on # recover from partial page writes -#wal_compression = off # enable compression of full-page writes -wal_log_hints = on # also do full page writes of non-critical updates - # (change requires restart) -#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers - # (change requires restart) -#wal_writer_delay = 200ms # 1-10000 milliseconds - -#commit_delay = 0 # range 0-100000, in microseconds -#commit_siblings = 5 # range 1-1000 - -# - Checkpoints - - -#checkpoint_timeout = 5min # range 30s-1h -#max_wal_size = 1GB -#min_wal_size = 80MB -#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0 -#checkpoint_warning = 30s # 0 disables - -# - Archiving - - -archive_mode = on # enables archiving; off, on, or always - # (change requires restart) -archive_command = 'test ! -f /dbroot/pglogs/main/%f && cp %p /dbroot/pglogs/main/%f' - # command to use to archive a logfile segment - # placeholders: %p = path of file to archive - # %f = file name only - # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' -archive_timeout = 0 # force a logfile segment switch after this - # number of seconds; 0 disables - - -#------------------------------------------------------------------------------ -# REPLICATION -#------------------------------------------------------------------------------ - -# - Sending Server(s) - - -# Set these on the master and on any standby that will send replication data. - -max_wal_senders = 4 # max number of walsender processes - # (change requires restart) -#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables -#wal_sender_timeout = 60s # in milliseconds; 0 disables - -max_replication_slots = 5 # max number of replication slots - # (change requires restart) - # DCAE NOTE: if we ever grow our cluster, change this value to - # the number of nodes + 1 -#track_commit_timestamp = off # collect timestamp of transaction commit - # (change requires restart) - -# - Master Server - - -# These settings are ignored on a standby server. - -#synchronous_standby_names = '' # standby servers that provide sync rep - # comma-separated list of application_name - # from standby(s); '*' = all -#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed - -# - Standby Servers - - -# These settings are ignored on a master server. - -hot_standby = on # "on" allows queries during recovery - # (change requires restart) -#max_standby_archive_delay = 30s # max delay before canceling queries - # when reading WAL from archive; - # -1 allows indefinite delay -#max_standby_streaming_delay = 30s # max delay before canceling queries - # when reading streaming WAL; - # -1 allows indefinite delay -#wal_receiver_status_interval = 10s # send replies at least this often - # 0 disables -#hot_standby_feedback = off # send info from standby to prevent - # query conflicts -#wal_receiver_timeout = 60s # time that receiver waits for - # communication from master - # in milliseconds; 0 disables -#wal_retrieve_retry_interval = 5s # time to wait before retrying to - # retrieve WAL after a failed attempt - - -#------------------------------------------------------------------------------ -# QUERY TUNING -#------------------------------------------------------------------------------ - -# - Planner Method Configuration - - -#enable_bitmapscan = on -#enable_hashagg = on -#enable_hashjoin = on -#enable_indexscan = on -#enable_indexonlyscan = on -#enable_material = on -#enable_mergejoin = on -#enable_nestloop = on -#enable_seqscan = on -#enable_sort = on -#enable_tidscan = on - -# - Planner Cost Constants - - -#seq_page_cost = 1.0 # measured on an arbitrary scale -#random_page_cost = 4.0 # same scale as above -#cpu_tuple_cost = 0.01 # same scale as above -#cpu_index_tuple_cost = 0.005 # same scale as above -#cpu_operator_cost = 0.0025 # same scale as above -#effective_cache_size = 4GB - -# - Genetic Query Optimizer - - -#geqo = on -#geqo_threshold = 12 -#geqo_effort = 5 # range 1-10 -#geqo_pool_size = 0 # selects default based on effort -#geqo_generations = 0 # selects default based on effort -#geqo_selection_bias = 2.0 # range 1.5-2.0 -#geqo_seed = 0.0 # range 0.0-1.0 - -# - Other Planner Options - - -#default_statistics_target = 100 # range 1-10000 -#constraint_exclusion = partition # on, off, or partition -#cursor_tuple_fraction = 0.1 # range 0.0-1.0 -#from_collapse_limit = 8 -#join_collapse_limit = 8 # 1 disables collapsing of explicit - # JOIN clauses - - -#------------------------------------------------------------------------------ -# ERROR REPORTING AND LOGGING -#------------------------------------------------------------------------------ - -# - Where to Log - - -#log_destination = 'stderr' # Valid values are combinations of - # stderr, csvlog, syslog, and eventlog, - # depending on platform. csvlog - # requires logging_collector to be on. - -# This is used when logging to stderr: -logging_collector = on # for DCAE -#logging_collector = off # Enable capturing of stderr and csvlog - # into log files. Required to be on for - # csvlogs. - # (change requires restart) - -# These are only used if logging_collector is on: -log_directory = '/opt/logs/dcae/postgresql/server' # for DCAE -#log_directory = 'pg_log' # directory where log files are written, - # can be absolute or relative to PGDATA -log_filename = 'error.log' # for DCAE -#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, - # can include strftime() escapes -log_file_mode = 0666 # for DCAE -#log_file_mode = 0600 # creation mode for log files, - # begin with 0 to use octal notation -#log_truncate_on_rotation = off # If on, an existing log file with the - # same name as the new log file will be - # truncated rather than appended to. - # But such truncation only occurs on - # time-driven rotation, not on restarts - # or size-driven rotation. Default is - # off, meaning append to existing files - # in all cases. -log_rotation_age = 1d # for DCAE -#log_rotation_age = 1d # Automatic rotation of logfiles will - # happen after that time. 0 disables. -log_rotation_size = 0 # for DCAE -#log_rotation_size = 10MB # Automatic rotation of logfiles will - # happen after that much log output. - # 0 disables. - -# These are relevant when logging to syslog: -#syslog_facility = 'LOCAL0' -#syslog_ident = 'postgres' - -# This is only relevant when logging to eventlog (win32): -#event_source = 'PostgreSQL' - -# - When to Log - - -#client_min_messages = notice # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # log - # notice - # warning - # error - -#log_min_messages = warning # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic - -#log_min_error_statement = error # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic (effectively off) - -#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements - # and their durations, > 0 logs only - # statements running at least this number - # of milliseconds - - -# - What to Log - - -#debug_print_parse = off -#debug_print_rewritten = off -#debug_print_plan = off -#debug_pretty_print = on -#log_checkpoints = off -#log_connections = off -#log_disconnections = off -#log_duration = off -#log_error_verbosity = default # terse, default, or verbose messages -#log_hostname = off -log_line_prefix = '%t|%a|%u|%d|%i|%e|%r|%c|' # for DCAE -#log_line_prefix = '' # special values: - # %a = application name - # %u = user name - # %d = database name - # %r = remote host and port - # %h = remote host - # %p = process ID - # %t = timestamp without milliseconds - # %m = timestamp with milliseconds - # %i = command tag - # %e = SQL state - # %c = session ID - # %l = session line number - # %s = session start timestamp - # %v = virtual transaction ID - # %x = transaction ID (0 if none) - # %q = stop here in non-session - # processes - # %% = '%' - # e.g. '<%u%%%d> ' -#log_lock_waits = off # log lock waits >= deadlock_timeout -#log_statement = 'none' # none, ddl, mod, all -#log_replication_commands = off -#log_temp_files = -1 # log temporary files equal or larger - # than the specified size in kilobytes; - # -1 disables, 0 logs all temp files -#log_timezone = 'GMT' - - -# - Process Title - - -#cluster_name = '' # added to process titles if nonempty - # (change requires restart) -#update_process_title = on - - -#------------------------------------------------------------------------------ -# RUNTIME STATISTICS -#------------------------------------------------------------------------------ - -# - Query/Index Statistics Collector - - -#track_activities = on -#track_counts = on -#track_io_timing = off -#track_functions = none # none, pl, all -#track_activity_query_size = 1024 # (change requires restart) -#stats_temp_directory = 'pg_stat_tmp' - - -# - Statistics Monitoring - - -#log_parser_stats = off -#log_planner_stats = off -#log_executor_stats = off -#log_statement_stats = off - - -#------------------------------------------------------------------------------ -# AUTOVACUUM PARAMETERS -#------------------------------------------------------------------------------ - -#autovacuum = on # Enable autovacuum subprocess? 'on' - # requires track_counts to also be on. -#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and - # their durations, > 0 logs only - # actions running at least this number - # of milliseconds. -#autovacuum_max_workers = 3 # max number of autovacuum subprocesses - # (change requires restart) -#autovacuum_naptime = 1min # time between autovacuum runs -#autovacuum_vacuum_threshold = 50 # min number of row updates before - # vacuum -#autovacuum_analyze_threshold = 50 # min number of row updates before - # analyze -#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum -#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze -#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum - # (change requires restart) -#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age - # before forced vacuum - # (change requires restart) -#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for - # autovacuum, in milliseconds; - # -1 means use vacuum_cost_delay -#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for - # autovacuum, -1 means use - # vacuum_cost_limit - - -#------------------------------------------------------------------------------ -# CLIENT CONNECTION DEFAULTS -#------------------------------------------------------------------------------ - -# - Statement Behavior - - -#search_path = '"$user", public' # schema names -#default_tablespace = '' # a tablespace name, '' uses the default -#temp_tablespaces = '' # a list of tablespace names, '' uses - # only default tablespace -#check_function_bodies = on -#default_transaction_isolation = 'read committed' -#default_transaction_read_only = off -#default_transaction_deferrable = off -#session_replication_role = 'origin' -#statement_timeout = 0 # in milliseconds, 0 is disabled -#lock_timeout = 0 # in milliseconds, 0 is disabled -#vacuum_freeze_min_age = 50000000 -#vacuum_freeze_table_age = 150000000 -#vacuum_multixact_freeze_min_age = 5000000 -#vacuum_multixact_freeze_table_age = 150000000 -#bytea_output = 'hex' # hex, escape -#xmlbinary = 'base64' -#xmloption = 'content' -#gin_fuzzy_search_limit = 0 -#gin_pending_list_limit = 4MB - -# - Locale and Formatting - - -#datestyle = 'iso, mdy' -#intervalstyle = 'postgres' -#timezone = 'GMT' -#timezone_abbreviations = 'Default' # Select the set of available time zone - # abbreviations. Currently, there are - # Default - # Australia (historical usage) - # India - # You can create your own file in - # share/timezonesets/. -#extra_float_digits = 0 # min -15, max 3 -#client_encoding = sql_ascii # actually, defaults to database - # encoding - -# These settings are initialized by initdb, but they can be changed. -#lc_messages = 'C' # locale for system error message - # strings -#lc_monetary = 'C' # locale for monetary formatting -#lc_numeric = 'C' # locale for number formatting -#lc_time = 'C' # locale for time formatting - -# default configuration for text search -#default_text_search_config = 'pg_catalog.simple' - -# - Other Defaults - - -#dynamic_library_path = '$libdir' -#local_preload_libraries = '' -#session_preload_libraries = '' - - -#------------------------------------------------------------------------------ -# LOCK MANAGEMENT -#------------------------------------------------------------------------------ - -#deadlock_timeout = 1s -#max_locks_per_transaction = 64 # min 10 - # (change requires restart) -# Note: Each lock table slot uses ~270 bytes of shared memory, and there are -# max_locks_per_transaction * (max_connections + max_prepared_transactions) -# lock table slots. -#max_pred_locks_per_transaction = 64 # min 10 - # (change requires restart) - - -#------------------------------------------------------------------------------ -# VERSION/PLATFORM COMPATIBILITY -#------------------------------------------------------------------------------ - -# - Previous PostgreSQL Versions - - -#array_nulls = on -#backslash_quote = safe_encoding # on, off, or safe_encoding -#default_with_oids = off -#escape_string_warning = on -#lo_compat_privileges = off -#operator_precedence_warning = off -#quote_all_identifiers = off -#sql_inheritance = on -#standard_conforming_strings = on -#synchronize_seqscans = on - -# - Other Platforms and Clients - - -#transform_null_equals = off - - -#------------------------------------------------------------------------------ -# ERROR HANDLING -#------------------------------------------------------------------------------ - -#exit_on_error = off # terminate session on any error? -#restart_after_crash = on # reinitialize after backend crash? - - -#------------------------------------------------------------------------------ -# CONFIG FILE INCLUDES -#------------------------------------------------------------------------------ - -# These options allow settings to be loaded from files other than the -# default postgresql.conf. - -#include_dir = 'conf.d' # include files ending in '.conf' from - # directory 'conf.d' -#include_if_exists = 'exists.conf' # include file only if it exists -#include = 'special.conf' # include file - - -#------------------------------------------------------------------------------ -# CUSTOMIZED OPTIONS -#------------------------------------------------------------------------------ - -# Add settings for extensions here - -# repmgr / repmgrd -shared_preload_libraries = 'repmgr_funcs' diff --git a/pgaas/src/stage/opt/app/pgaas/makefile b/pgaas/src/stage/opt/app/pgaas/makefile deleted file mode 100644 index 75ad62b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/makefile +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -STAGEDIR=/dev/null -all: - -stage: - for i in bin lib etc man init main; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../$(STAGEDIR) ) \ - done - for i in lib/gif; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../../$(STAGEDIR) ) \ - done - -clean: - for i in bin lib etc man init main; do \ - ( cd $$i && $(MAKE) clean ) \ - done - for i in lib/gif; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../../$(STAGEDIR) clean ) \ - done - -clobber: - for i in bin lib etc man init main; do \ - ( cd $$i && $(MAKE) clobber ) \ - done - for i in lib/gif; do \ - ( cd $$i && $(MAKE) stage STAGEDIR=../../$(STAGEDIR) clobber ) \ - done diff --git a/pgaas/src/stage/opt/app/pgaas/man/.gitignore b/pgaas/src/stage/opt/app/pgaas/man/.gitignore deleted file mode 100644 index 87ed949..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.1 -todo diff --git a/pgaas/src/stage/opt/app/pgaas/man/check_cluster.man b/pgaas/src/stage/opt/app/pgaas/man/check_cluster.man deleted file mode 100644 index 071e9d0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/check_cluster.man +++ /dev/null @@ -1,40 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH check_cluster 1PG {{DATE}} ONAP ONAP -.SH NAME -check_cluster - check the state of the cluster -.SH SYNOPSIS -check_cluster [-d file] [-v] [-l] [-t timeout] -.HP 20 --d file -duplicate the status output to the given file -.HP 20 --l -do not check localhost first (and restarting the service if necessary) -.HP 20 --t timeout -set how long to wait when accessing the servers -.HP 20 --v -verbose -.SH DESCRIPTION -Loop through the nodes in the cluster, using pgwget to determine how many are -masters, secondaries, in maintenance, or not up. -Complain about certain situations. -If there are multiple masters, and this not the first master in the list, then: - -run pg_ctl_restart - -to prevent /ro from returning true -.PP -When \-d is used, the filename will have ".tmp" appended, writing the output to that temp filename, and then renaming the ".tmp" file to the given filename. diff --git a/pgaas/src/stage/opt/app/pgaas/man/dcae_admin_db.man b/pgaas/src/stage/opt/app/pgaas/man/dcae_admin_db.man deleted file mode 100644 index 5b13a7b..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/dcae_admin_db.man +++ /dev/null @@ -1,72 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH dcae_admin_db.py 1PG {{DATE}} ONAP ONAP -.SH NAME -dcae_admin_db.py - interface with DCAE controller -.SH SYNOPSIS -dcae_admin_db.py [options] configurationChanged json-file -.br -dcae_admin_db.py [options] suspend -.br -dcae_admin_db.py [options] resume -.br -dcae_admin_db.py [options] test -.SS OPTIONS -.HP 20 --H / --dbhost= -host name, defaults to CFG['dcae_admin_db_hostname'] -.HP 20 --d / --dbdir= -database directory path, defaults to CFG['db_directory'] -.HP 20 --c / --dbconf= -database configuration path, defaults to CFG['db_configuration'] -.HP 20 --D / --dbname= -database name, defaults to CFG['dcae_admin_db_databasename'] -.HP 20 --U / --user= -user to login as, defaults to CFG['dcae_admin_db_username'] -.HP 20 --P / --password= -password for user, defaults to CFG['dcae_admin_db_password'] -.HP 20 --B / --bindir= -postgresql bin directory, defaults to CFG['pg_bin_directory'] -.HP 20 --i / --ignorefile= -skip configuration if this file is present, defaults to CFG['skip_configuration_file'] -.HP 20 --n / --nocreate -do not create the databases / users -.HP 20 --I / --ignoredb -ignore current state of database -.HP 20 --R / --remove -remove old databases / users -.HP 20 --J / --jsontop= -top of json tree, as in \"['pgaas']\" -.HP 20 --e / --errors= -where to redirect error output, defaults to CFG['dcae_admin_db_errors_file'] then stderr -.HP 20 --t / --trace= -where to redirect trace output, defaults to CFG['dcae_admin_db_trace_file'] then stderr -.HP 20 --v / --verbose -verbose, defaults to CFG['dcae_admin_db_verbosity'] -.SH DESCRIPTION -This program is intended to be executed by the DCAE controller manager. -Given a database description json file, update the current VM accordingly diff --git a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.json b/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.json deleted file mode 100644 index 2b59cda..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "version": "1.1.0", - "title": "PostgreSQL as a Service REST API" - }, - "paths": { - "/rw": { - "get": { - "description": "Gets a string indicating if this is a PostgreSQL Master server\n", - "responses": { - "200": { - "description": "Successful response", - "schema": { - "title": "status", - "type": "string" - } - } - } - } - }, - "/ro": { - "get": { - "description": "Gets a string indicating if this is either a PostgreSQL Master or Secondary server\n", - "responses": { - "200": { - "description": "Successful response", - "schema": { - "title": "status", - "type": "string" - } - } - } - } - }, - "/healthcheck/status": { - "get": { - "description": "Gets a string indicating the status of this server\n", - "responses": { - "200": { - "description": "Successful response", - "schema": { - "title": "output", - "type": "string" - } - }, - "429": { - "description": "Error response", - "schema": { - "title": "output", - "type": "string" - } - } - } - } - } - } -} diff --git a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.yaml b/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.yaml deleted file mode 100644 index 5f3ffee..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/iDNS-responder.swagger.yaml +++ /dev/null @@ -1,68 +0,0 @@ -# Example YAML to get you started quickly. -# Be aware that YAML has indentation based scoping. -# Code completion support is available so start typing for available options. -swagger: '2.0' - -# This is your document metadata -info: - version: "1.1.0" - title: PostgreSQL as a Service REST API - -# Describe your paths here -paths: - # This is a path endpoint. Change it. - /rw: - # This is a HTTP operation - get: - # Describe this verb here. Note: you can use markdown - description: | - Gets a string indicating if this is a PostgreSQL Master server - # Expected responses for this operation: - responses: - # Response code - 200: - description: Successful response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: status - type: string - /ro: - # This is a HTTP operation - get: - # Describe this verb here. Note: you can use markdown - description: | - Gets a string indicating if this is either a PostgreSQL Master or Secondary server - # Expected responses for this operation: - responses: - # Response code - 200: - description: Successful response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: status - type: string - /healthcheck/status: - # This is a HTTP operation - get: - # Describe this verb here. Note: you can use markdown - description: | - Gets a string indicating the status of this server - # Expected responses for this operation: - responses: - # Response code - 200: - description: Successful response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: output - type: string - 429: - description: Error response - # A schema describing your response object. - # Use JSON Schema format - schema: - title: output - type: string diff --git a/pgaas/src/stage/opt/app/pgaas/man/isrw.man b/pgaas/src/stage/opt/app/pgaas/man/isrw.man deleted file mode 100644 index 5aed4b1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/isrw.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH isrw 1PG {{DATE}} ONAP ONAP -.SH NAME -isrw - check if a running PostgreSQL is a master or secondary -.SH SYNOPSIS -isrw -.SH DESCRIPTION -Either prints Master or Secondary depending on the state of the running PostgreSQL server. diff --git a/pgaas/src/stage/opt/app/pgaas/man/list_masters.man b/pgaas/src/stage/opt/app/pgaas/man/list_masters.man deleted file mode 100644 index d254fef..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/list_masters.man +++ /dev/null @@ -1,30 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH list_masters 1PG {{DATE}} ONAP ONAP -.SH NAME -list_masters - loop through the nodes in the cluster, using a remote call to determine if any are a master. -.SH SYNOPSIS -list_masters -.SH DESCRIPTION -List_masters loops through the nodes in the cluster, using a remote call to the iDNS-responder running on each server to determine if any are a master. -The names of the masters are printed (there should only be one). -.SS Exit Codes -.HP 20 -0 -one master exists and is running -.HP 20 -1 -no masters exist -.HP 20 -2 -more than one master exist diff --git a/pgaas/src/stage/opt/app/pgaas/man/makefile b/pgaas/src/stage/opt/app/pgaas/man/makefile deleted file mode 100644 index 4ce3f6c..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/makefile +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - - -.SUFFIXES: .man .1 - -TR2MAN = -%.1 : %.man - $(TR2MAN) - -STAGEDIR=/dev/null -DISTPATH=/opt/app/pgaas - -TRFILES := $(wildcard *.man) -MANFILES := $(patsubst %.man,%.1,$(wildcard *.man)) - -all: $(MANFILES) - -stage: $(MANFILES) - rm -rf $(STAGEDIR)/$(DISTPATH)/man - mkdir -p $(STAGEDIR)/$(DISTPATH)/man - cp -p $(MANFILES) *.yaml *.json $(STAGEDIR)/$(DISTPATH)/man - -clean: - rm -f *~ - -clobber: clean - rm -f *.1 - -# really should not need to list each of the files individually here with how to make them - -check_cluster.1: check_cluster.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -dcae_admin_db.1: dcae_admin_db.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -isrw.1: isrw.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -list_masters.1: list_masters.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_promote.1: pg_ctl_promote.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_restart.1: pg_ctl_restart.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_start.1: pg_ctl_start.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_status.1: pg_ctl_status.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -pg_ctl_stop.1: pg_ctl_stop.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -repmgrc.1: repmgrc.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -repmgrdc.1: repmgrdc.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -runpsqll.1: runpsqll.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -runpsql.1: runpsql.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -setpropvalue.1: setpropvalue.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_is_in_recovery.1: show_pg_is_in_recovery.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_activity.1: show_pg_stat_activity.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_archiver.1: show_pg_stat_archiver.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_bgwriter.1: show_pg_stat_bgwriter.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_database_conflicts.1: show_pg_stat_database_conflicts.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_database.1: show_pg_stat_database.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_functions.1: show_pg_statio_user_functions.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_indexes.1: show_pg_statio_user_indexes.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_sequences.1: show_pg_statio_user_sequences.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_statio_user_tables.1: show_pg_statio_user_tables.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_user_indexes.1: show_pg_stat_user_indexes.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -show_pg_stat_user_tables.1: show_pg_stat_user_tables.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -startpsql.1: startpsql.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -start_maintenance_mode.1: start_maintenance_mode.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -stop_maintenance_mode.1: stop_maintenance_mode.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ -update_var_run_isrw.1: update_var_run_isrw.man - DATE=$$(date +%Y-%m-%d); sed "1s/ {{DATE}} / $$DATE /" < $< | nroff -Tlp -man > $@ diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_promote.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_promote.man deleted file mode 100644 index 9e12376..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_promote.man +++ /dev/null @@ -1,20 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH pg_ctl_promote 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_promote - helper function to run pg_ctl promote -.SH SYNOPSIS -pg_ctl_promote -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl promote". - diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_restart.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_restart.man deleted file mode 100644 index 6fb7519..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_restart.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH pg_ctl_restart 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_restart - helper function to run pg_ctl restart -.SH SYNOPSIS -pg_ctl_restart -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl stop" and "pg_ctl start". diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_start.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_start.man deleted file mode 100644 index cb6a3e5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_start.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH pg_ctl_start 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_start - helper function to run pg_ctl start -.SH SYNOPSIS -pg_ctl_start -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl start". diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_status.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_status.man deleted file mode 100644 index 3051fdc..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_status.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH pg_ctl_status 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_status - helper function to run pg_ctl status -.SH SYNOPSIS -pg_ctl_status -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl status". diff --git a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_stop.man b/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_stop.man deleted file mode 100644 index e437a6a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/pg_ctl_stop.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH pg_ctl_stop 1PG {{DATE}} ONAP ONAP -.SH NAME -pg_ctl_stop - helper function to run pg_ctl stop -.SH SYNOPSIS -pg_ctl_stop -.SH DESCRIPTION -Finds the pg_ctl command, the location of the database and its configurations and runs "pg_ctl stop". diff --git a/pgaas/src/stage/opt/app/pgaas/man/repmgrc.man b/pgaas/src/stage/opt/app/pgaas/man/repmgrc.man deleted file mode 100644 index f327913..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/repmgrc.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH repmgr 1PG {{DATE}} ONAP ONAP -.SH NAME -repmgrc - helper function to run repmgr command -.SH SYNOPSIS -repmgrc -.SH DESCRIPTION -Finds the repmgr command and its configurations and runs "repmgr" appropriately. diff --git a/pgaas/src/stage/opt/app/pgaas/man/repmgrdc.man b/pgaas/src/stage/opt/app/pgaas/man/repmgrdc.man deleted file mode 100644 index 5e8e0ad..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/repmgrdc.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH repmgrd 1PG {{DATE}} ONAP ONAP -.SH NAME -repmgrdc - helper function to run repmgrd command -.SH SYNOPSIS -repmgrdc -.SH DESCRIPTION -Finds the repmgrd command and its configurations and runs "repmgrd" appropriately. diff --git a/pgaas/src/stage/opt/app/pgaas/man/runpsql.man b/pgaas/src/stage/opt/app/pgaas/man/runpsql.man deleted file mode 100644 index 393f437..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/runpsql.man +++ /dev/null @@ -1,21 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH runpsql 1PG {{DATE}} ONAP ONAP -.SH NAME -runpsql - run the psql command that is given on the command line -.SH SYNOPSIS -runpsql sql command ... -.SH DESCRIPTION -Locate the psql command and run the command specified as the arguments on the command line. -.SH "SEE ALSO" -runpsqll, startpsql diff --git a/pgaas/src/stage/opt/app/pgaas/man/runpsqll.man b/pgaas/src/stage/opt/app/pgaas/man/runpsqll.man deleted file mode 100644 index 556aea0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/runpsqll.man +++ /dev/null @@ -1,22 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH runpsqll 1PG {{DATE}} ONAP ONAP -.SH NAME -runpsqll - run the psql command that is given on the command line, no labels -.SH SYNOPSIS -runpsqll sql command ... -.SH DESCRIPTION -Locate the psql command and run the command specified as the arguments on the command line. -Only output the tuples. -.SH "SEE ALSO" -runpsql, startpsql diff --git a/pgaas/src/stage/opt/app/pgaas/man/setpropvalue.man b/pgaas/src/stage/opt/app/pgaas/man/setpropvalue.man deleted file mode 100644 index 78b7fb5..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/setpropvalue.man +++ /dev/null @@ -1,26 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH setpropvalue 1PG {{DATE}} ONAP ONAP -.SH NAME -setpropvalue - set a property in the CDF property file -.SH SYNOPSIS -setpropvalue -n name -v value [-x] -.HP 20 --n -name to configure -.HP 20 --v -value to set -.HP 20 --x -encrypt the value diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_is_in_recovery.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_is_in_recovery.man deleted file mode 100644 index d9391d4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_is_in_recovery.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_is_in_recovery 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_is_in_recovery - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_is_in_recovery -.SH DESCRIPTION -show_pg_is_in_recovery is a convenience program to extract the pg_is_in_recovery information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_activity.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_activity.man deleted file mode 100644 index 3c8e829..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_activity.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_stat_activity 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_activity - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_activity -.SH DESCRIPTION -show_pg_stat_activity is a convenience program to extract the pg_stat_activity information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_archiver.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_archiver.man deleted file mode 100644 index 8fc85e1..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_archiver.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_stat_archiver 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_archiver - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_archiver -.SH DESCRIPTION -show_pg_stat_archiver is a convenience program to extract the pg_stat_archiver information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_bgwriter.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_bgwriter.man deleted file mode 100644 index 3b960d8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_bgwriter.man +++ /dev/null @@ -1,20 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_stat_bgwriter 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_bgwriter - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_bgwriter -.SH DESCRIPTION -show_pg_stat_bgwriter is a convenience program to extract the pg_stat_bgwriter information from the database. - diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database.man deleted file mode 100644 index b6e0e7a..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_stat_database 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_database - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_database -.SH DESCRIPTION -show_pg_stat_database is a convenience program to extract the pg_stat_database information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database_conflicts.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database_conflicts.man deleted file mode 100644 index 78e29c3..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_database_conflicts.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_stat_database_conflicts 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_database_conflicts - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_database_conflicts -.SH DESCRIPTION -show_pg_stat_database_conflicts is a convenience program to extract the pg_stat_database_conflicts information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_indexes.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_indexes.man deleted file mode 100644 index 3b76d21..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_indexes.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_stat_user_indexes 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_user_indexes - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_user_indexes -.SH DESCRIPTION -show_pg_stat_user_indexes is a convenience program to extract the pg_stat_user_indexes information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_tables.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_tables.man deleted file mode 100644 index 2356ebd..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_stat_user_tables.man +++ /dev/null @@ -1,20 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_stat_user_indexes 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_stat_user_tables - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_stat_user_tables -.SH DESCRIPTION -show_pg_stat_user_tables is a convenience program to extract the pg_stat_user_tables information from the database. - diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_functions.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_functions.man deleted file mode 100644 index cd51933..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_functions.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_statio_user_functions 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_functions - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_functions -.SH DESCRIPTION -show_pg_statio_user_functions is a convenience program to extract the pg_statio_user_functions information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_indexes.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_indexes.man deleted file mode 100644 index 713e144..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_indexes.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_statio_user_indexes 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_indexes - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_indexes -.SH DESCRIPTION -show_pg_statio_user_indexes is a convenience program to extract the pg_statio_user_indexes information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_sequences.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_sequences.man deleted file mode 100644 index fce6db4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_sequences.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_statio_user_sequences 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_sequences - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_sequences -.SH DESCRIPTION -show_pg_statio_user_sequences is a convenience program to extract the pg_statio_user_sequences information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_tables.man b/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_tables.man deleted file mode 100644 index ec2cc5c..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/show_pg_statio_user_tables.man +++ /dev/null @@ -1,19 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH show_pg_statio_user_tables 1PG {{DATE}} ONAP ONAP -.SH NAME -show_pg_statio_user_tables - convenience program to extract info from the database -.SH SYNOPSIS -show_pg_statio_user_tables -.SH DESCRIPTION -show_pg_statio_user_tables is a convenience program to extract the pg_statio_user_tables information from the database. diff --git a/pgaas/src/stage/opt/app/pgaas/man/start_maintenance_mode.man b/pgaas/src/stage/opt/app/pgaas/man/start_maintenance_mode.man deleted file mode 100644 index 8e098a4..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/start_maintenance_mode.man +++ /dev/null @@ -1,28 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH start_maintenance_mode 1PG {{DATE}} ONAP ONAP -.SH NAME -start_maintenance_mode - convert this system to maintenance mode -.SH SYNOPSIS -start_maintenance_mode -.SH DESCRIPTION -Take this system out of the normal rotation and mark it as being in maintenance mode. -This command may only be used on a secondary system and not on a master system. -After this command is run, the PostgreSQL server will be brought down, but may be -restarted manually using the pg_ctl_start. -Note that the health checks will not regard this system as being in the normal -rotation until the command stop_maintenance_mode is executed, allowing the DBA to perform -whatever is needed to perform a backup or other maintenance routines, -such as copying the database files. -.SH FILES -/var/run/postgresql/inmaintenance diff --git a/pgaas/src/stage/opt/app/pgaas/man/startpsql.man b/pgaas/src/stage/opt/app/pgaas/man/startpsql.man deleted file mode 100644 index 5bba06e..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/startpsql.man +++ /dev/null @@ -1,21 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH startpsq 1PG {{DATE}} ONAP ONAP -.SH NAME -startpsql - run the psql command -.SH SYNOPSIS -startpsql -.SH DESCRIPTION -Locate the psql command and run it. -.SH "SEE ALSO" -runpsql, runpsqll diff --git a/pgaas/src/stage/opt/app/pgaas/man/stop_maintenance_mode.man b/pgaas/src/stage/opt/app/pgaas/man/stop_maintenance_mode.man deleted file mode 100644 index 9ed24bc..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/stop_maintenance_mode.man +++ /dev/null @@ -1,24 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH stop_maintenance_mode 1PG {{DATE}} ONAP ONAP -.SH NAME -stop_maintenance_mode - convert this system to maintenance mode -.SH SYNOPSIS -stop_maintenance_mode -.SH DESCRIPTION -Mark this system as no longer being in maintenance mode, and -return this system back to the normal rotation. -This command may only be used on a secondary system and not on a master system. -This command will also restart the PostgreSQL server. -.SH FILES -/var/run/postgresql/inmaintenance diff --git a/pgaas/src/stage/opt/app/pgaas/man/todo b/pgaas/src/stage/opt/app/pgaas/man/todo deleted file mode 100644 index c2b57f8..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/todo +++ /dev/null @@ -1,5 +0,0 @@ -ls: cannot access ../man/gen-repmgr-info.man: No such file or directory -ls: cannot access ../man/pgaas-verify-install.man: No such file or directory -ls: cannot access ../man/pgwget.man: No such file or directory -ls: cannot access ../man/repmgrd-status-changes.man: No such file or directory -ls: cannot access ../man/verify_pg_privileges.man: No such file or directory diff --git a/pgaas/src/stage/opt/app/pgaas/man/update_var_run_isrw.man b/pgaas/src/stage/opt/app/pgaas/man/update_var_run_isrw.man deleted file mode 100644 index 98470f0..0000000 --- a/pgaas/src/stage/opt/app/pgaas/man/update_var_run_isrw.man +++ /dev/null @@ -1,23 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH startpsq 1PG {{DATE}} ONAP ONAP -.SH NAME -update_var_run_isrw - update the /var/run/postgresql/isrw file -.SH SYNOPSIS -update_var_run_isrw -.SH DESCRIPTION -This program updates the /var/run/postgresql/isrw file using the output of the isrw(1PG) command. -The file is updated 6 times separated by 10 seconds. -It is meant to be run from the postgres cron. -.SH "SEE ALSO" -isrw diff --git a/pgaas/src/testlock/.gitignore b/pgaas/src/testlock/.gitignore deleted file mode 100644 index 0618485..0000000 --- a/pgaas/src/testlock/.gitignore +++ /dev/null @@ -1 +0,0 @@ -testlock diff --git a/pgaas/src/testlock/makefile b/pgaas/src/testlock/makefile deleted file mode 100644 index 8e23640..0000000 --- a/pgaas/src/testlock/makefile +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this code except in compliance -# with the License. You may obtain a copy of the License -# at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. - -STAGEDIR=/dev/null -DISTPATH=/dev/null - -all: testlock - -TESTLOCK=./testlock - -ttestlock: testlock - @echo;echo should print usage list - -$(TESTLOCK) - @echo;echo should print usage list - -$(TESTLOCK) -? - @echo;echo should print missing lock filename - -$(TESTLOCK) -t 0 - @echo;echo should print missing command - -$(TESTLOCK) -t 0 /var/tmp/tl - @echo;echo should run immediately - $(TESTLOCK) -t 0 /var/tmp/tl /bin/echo hello - @echo;echo grab lock, done SHOULD run after lock becomes available - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) /var/tmp/tl /bin/echo done;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, not waiting should NOT run - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 0 /var/tmp/tl /bin/echo not waiting;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, echo should NOT run because lock does not become available in 4 seconds - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 3 /var/tmp/tl /bin/echo waiting up to 3 seconds;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, echo should SILENTLY NOT run because lock does not become available in 4 seconds - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 3 -s /var/tmp/tl /bin/echo waiting up to 3 seconds;date - $(TESTLOCK) /var/tmp/tl true # cleanup - @echo;echo grab lock, echo SHOULD run after lock becomes available in 5 seconds - date;$(TESTLOCK) /var/tmp/tl sleep 5 & sleep 1; $(TESTLOCK) -t 10 /var/tmp/tl /bin/echo waiting up to 10 seconds;date - $(TESTLOCK) /var/tmp/tl true # cleanup - -testlock: testlock.c - gcc -o testlock testlock.c - -clean: - rm -f *~ - -clobber: clean - rm -f testlock - -stage: testlock - cp -p testlock $(STAGEDIR)/$(DISTPATH)/bin/testlock - chmod a+x $(STAGEDIR)/$(DISTPATH)/bin/testlock diff --git a/pgaas/src/testlock/testlock.1 b/pgaas/src/testlock/testlock.1 deleted file mode 100644 index 12dbb9d..0000000 --- a/pgaas/src/testlock/testlock.1 +++ /dev/null @@ -1,38 +0,0 @@ -'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. -'\" -'\" Licensed under the Apache License, Version 2.0 (the "License"); -'\" you may not use this code except in compliance -'\" with the License. You may obtain a copy of the License -'\" at http://www.apache.org/licenses/LICENSE-2.0 -'\" -'\" Unless required by applicable law or agreed to in writing, software -'\" distributed under the License is distributed on an "AS IS" BASIS, -'\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -'\" implied. See the License for the specific language governing -'\" permissions and limitations under the License. -.TH testlock 1 "April 26 2006" "" "" -.SH NAME -testlock \- lock a file and run a command with the lock held -.SH SYNOPSIS -testlock [-v] [-t timeout] [-s] [-r exittcode] filename command args ... -.SH DESCRIPTION -.PP -Testlock will acquire a file lock and then execute a command while the lock is held. -If no timeout is provided, testlock will wait indefinitely until the file can be locked, -and then execute the command. -If a timeout is given, it will stop waiting after that many seconds have passed. -.SS Options -.IP -t -Abort if the lock cannot be acquired after -.I timeout -seconds. -If -.I timeout -is 0, the lock will be totally non-blocking. -.IP -s -Silently ignore errors with locking. -(Other errors will still be reported.) -.IP -r exitcode -If the lock cannot be acquired, use this exit code instead of the default exit code of 99. -.SH AUTHOR -Tony Hansen. diff --git a/pgaas/src/testlock/testlock.c b/pgaas/src/testlock/testlock.c deleted file mode 100644 index 41bea59..0000000 --- a/pgaas/src/testlock/testlock.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - Usage: testlock [-t timeout] [-s] filename command args ... - - Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this code except in compliance - with the License. You may obtain a copy of the License - at http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied. See the License for the specific language governing - permissions and limitations under the License. - -*/ - -#include <sys/file.h> -#include <stdio.h> -#include <unistd.h> -#include <getopt.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdbool.h> -#include <errno.h> -#include <string.h> - -void usage(const char *prog0, const char *msg) -{ - if (msg) fprintf(stderr, "%s\n", msg); - fprintf(stderr, "Usage: %s [-v] [-t timeout] [-s] [-r retcode] lock-filename command args ...\n", prog0); - fprintf(stderr, "-t ##\thow long to wait for a lock to be freed. 0 means exit immediately\n"); - fprintf(stderr, "-s\tsilently ignore errors with locking\n"); - fprintf(stderr, "-r ##\texit with this code when the lock fails\n"); - fprintf(stderr, "-v\tbe verbose\n"); - fprintf(stderr, "Note:\tlock-filename is created (if it does not exist) and truncated before locking.\n"); - fprintf(stderr, "\tlock-filename is not removed after the command finishes\n"); - exit(1); -} - -int main(int argc, char **argv) -{ - const char *prog0 = argv[0]; - - int c; - int timeout = -1; - bool silent = false; - bool verbose = false; - int nolockret = 99; - - while ((c = getopt(argc, argv, "t:r:sv?")) != -1) { - switch (c) { - case 's': silent = true; break; - case 't': timeout = atoi(optarg); break; - case 'r': nolockret = atoi(optarg); break; - case 'v': verbose = true; break; - default: usage(prog0, NULL); - } - } - - argc -= optind; - argv += optind; - - if (argc < 1) { - usage(prog0, "Missing lock filename"); - } else if (argc < 2) { - usage(prog0, "Missing command to run"); - } - - const char *lockFilename = *argv++; - if (verbose) printf("lockfilename=%s\n", lockFilename); - - int lockfd = creat(lockFilename, 0666); - if (lockfd < 0) { - fprintf(stderr, "Cannot open %s: %s\n", lockFilename, strerror(errno)); - exit(2); - } - - if (timeout < 0) { - /* wait forever */ - lockf(lockfd, F_LOCK, 0); - } else { - /* try each second (for up to timeout seconds) to get the lock */ - int lockret = lockf(lockfd, F_TLOCK, 0); - int count = 0; - while ((lockret < 0) && (count++ < timeout)) { - sleep(1); - lockret = lockf(lockfd, F_TLOCK, 0); - } - if (lockret < 0) { - if (!silent) { - fprintf(stderr, "Cannot lock %s: %s\n", lockFilename, strerror(errno)); - } - exit(nolockret); - } - } - - /* now execute the given command */ - if (verbose) { - char **a = argv; - printf("calling program '%s'\n", *a); - while (*++a) { - printf("with argument '%s'\n", *a); - } - } - execvp(argv[0], argv); -} diff --git a/pgaas/src/testlock/testlock.md b/pgaas/src/testlock/testlock.md deleted file mode 100644 index 8ec2a48..0000000 --- a/pgaas/src/testlock/testlock.md +++ /dev/null @@ -1,27 +0,0 @@ -# testlock 1 "April 26 2006" "" "" -## NAME -testlock \- lock a file and run a command with the lock held -## SYNOPSIS -testlock [-v] [-t timeout] [-s] [-r exittcode] filename command args ... -## DESCRIPTION - -Testlock will acquire a file lock and then execute a command while the lock is held. -If no timeout is provided, testlock will wait indefinitely until the file can be locked, -and then execute the command. -If a timeout is given, it will stop waiting after that many seconds have passed. - -### Options - --t -Abort if the lock cannot be acquired after _timeout_ seconds. -If _timeout_ is 0, the lock will be totally non-blocking. - --s -Silently ignore errors with locking. -(Other errors will still be reported.) - --r exitcode -If the lock cannot be acquired, use this exit code instead of the default exit code of 99. - -## AUTHOR -Tony Hansen. |