summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-logger/src/main/java/org/onap/portalsdk/core/logging/logic/LoggerProperties.java
blob: 003929e63865f46e215e1f66f4ac75533c6fe836 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
/*
 * ============LICENSE_START==========================================
 * ONAP Portal SDK
 * ===================================================================
 * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
 * ===================================================================
 *
 * Unless otherwise specified, all software contained herein is licensed
 * under the Apache License, Version 2.0 (the "License");
 * you may not use this software 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.
 *
 * Unless otherwise specified, all documentation contained herein is licensed
 * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
 * you may not use this documentation except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *             https://creativecommons.org/licenses/by/4.0/
 *
 * Unless required by applicable law or agreed to in writing, documentation
 * 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.
 *
 * ============LICENSE_END============================================
 *
 * 
 */
package org.onap.portalsdk.core.logging.logic;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.springframework.util.ResourceUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class LoggerProperties {

	public static final String MDC_APPNAME = "AppName";
	public static final String MDC_REST_PATH = "RestPath";
	public static final String MDC_REST_METHOD = "RestMethod";
	public static final String INSTANCE_UUID = "instance_uuid";
	public static final String MDC_CLASS_NAME = "ClassName";
	public static final String MDC_LOGIN_ID = "LoginId";
	public static final String MDC_TIMER = "Timer";
	public static final String SDK_NAME = "ECOMP_SDK";
	public static final String ECOMP_REQUEST_ID = "X-ECOMP-RequestID";
	public static final String PARTNER_NAME = "PartnerName";
	public static final String FULL_URL = "Full-URL";
	public static final String AUDITLOG_BEGIN_TIMESTAMP = "AuditLogBeginTimestamp";
	public static final String AUDITLOG_END_TIMESTAMP = "AuditLogEndTimestamp";
	public static final String METRICSLOG_BEGIN_TIMESTAMP = "MetricsLogBeginTimestamp";
	public static final String METRICSLOG_END_TIMESTAMP = "MetricsLogEndTimestamp";
	public static final String CLIENT_IP_ADDRESS = "ClientIPAddress";
	public static final String STATUS_CODE = "StatusCode";
	public static final String RESPONSE_CODE = "ResponseCode";

	public static final String HTTP = "HTTP";
	public static final String HTTPS = "HTTPS";
	public static final String UNKNOWN = "Unknown";
	public static final String PROTOCOL = "PROTOCOL";
	public static final String USERAGENT_NAME = "user-agent";
	public static final String USER_ATTRIBUTE_NAME = "user_attribute_name";

	public static final String ALERT_SEVERITY = "AlertSeverity";
	public static final String ERROR_CATAGORY = "ErrorCategory";
	public static final String ERROR_CODE = "ErrorCode";
	public static final String ERROR_DESCRIPTION = "ErrorDescription";
	public static final String CUSTOM_FIELD1 = "CustomField1";
	public static final String CUSTOM_FIELD2 = "CustomField2";
	public static final String APP_NAME = "application_name";

	private LoggerProperties() {
	}

	private static Properties properties; 

	private static DocumentBuilderFactory dbFactory;

	private static DocumentBuilder dBuilder;

	private static Document doc;

	private static String propertyFileName = "classpath:logback.xml";

	private static final Object lockObject = new Object();

	/**
	 * Gets the property value for the specified key. If a value is found, leading
	 * and trailing space is trimmed.
	 *
	 * @param property Property key
	 * @return Value for the named property; null if the property file was not
	 *         loaded or the key was not found.
	 */
	public static String getProperty(String property) {
		if (properties == null) {
			synchronized (lockObject) {
				try {
					if (!initialize()) {
						return null;
					}
				} catch (IOException e) {
					return null;
				}
			}
		}
		String value = properties.getProperty(property);
		if (value != null)
			value = value.trim();
		return value;
	}

	/**
	 * Reads properties from a portal.properties file on the classpath.
	 * 
	 * Clients do NOT need to call this method. Clients MAY call this method to test
	 * whether the properties file can be loaded successfully.
	 * 
	 * @return True if properties were successfully loaded, else false.
	 * @throws IOException                  On failure
	 * @throws SAXException
	 * @throws ParserConfigurationException
	 */
	private static boolean initialize() throws IOException {
		File xmlFile = null;
//		if (properties != null)
//			return true;
//		InputStream in = LoggerProperties.class.getClassLoader().getResourceAsStream(propertyFileName);

		if (dbFactory != null)
			return true;
//		if (in == null)
//			return false;
		if (dbFactory == null)
//			properties = new Properties();
		dbFactory = DocumentBuilderFactory.newInstance();
		try {
//			properties.load(in);
			xmlFile = ResourceUtils.getFile(propertyFileName);
			dBuilder = dbFactory.newDocumentBuilder();
			doc = dBuilder.parse(xmlFile);
			doc.getDocumentElement().normalize();
		} catch (IOException | SAXException | ParserConfigurationException e) {
			return false;
		} finally {
//			in.close();
		}
		return true;
	}

	public static String getPropertyValue(String propertyName) {

		if (dbFactory == null) {
			synchronized (lockObject) {
				try {
					if (!initialize()) {
						return null;
					}
				} catch (IOException e) {
					return null;
				}
			}
		}
		String value = getValue(doc, propertyName);
		if (value != null)
			value = value.trim();
		return value;

	}

	private static String getValue(Document someNode, String property) {
		NodeList nodeList = someNode.getElementsByTagName("property");
		String Value = null;
		for (int i = 0; i < nodeList.getLength(); i++) {
			Node node = nodeList.item(i);
			if (node instanceof Element) {
				if (((Element) node).getAttribute("name").toString().equals(property)) {
					Value = ((Element) node).getAttribute("value").toString();
				}
			}
		}
		return Value;
	}
}