summaryrefslogtreecommitdiffstats
path: root/veslibrary/ves_javalibrary/evel_javalib2/src/evel_javalibrary/att/com/AgentMain.java
diff options
context:
space:
mode:
Diffstat (limited to 'veslibrary/ves_javalibrary/evel_javalib2/src/evel_javalibrary/att/com/AgentMain.java')
-rw-r--r--veslibrary/ves_javalibrary/evel_javalib2/src/evel_javalibrary/att/com/AgentMain.java407
1 files changed, 0 insertions, 407 deletions
diff --git a/veslibrary/ves_javalibrary/evel_javalib2/src/evel_javalibrary/att/com/AgentMain.java b/veslibrary/ves_javalibrary/evel_javalib2/src/evel_javalibrary/att/com/AgentMain.java
deleted file mode 100644
index 2ba1db5..0000000
--- a/veslibrary/ves_javalibrary/evel_javalib2/src/evel_javalibrary/att/com/AgentMain.java
+++ /dev/null
@@ -1,407 +0,0 @@
-
-package evel_javalibrary.att.com;
-
-/**************************************************************************//**
- * @file
- * Header for EVEL library
- *
- * This file implements the EVEL library which is intended to provide a
- * simple wrapper around the complexity of AT&T's Vendor Event Listener API so
- * that VNFs can use it without worrying about details of the API transport.
- *
- * License
- * -------
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file 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 org.apache.log4j.Logger;
-import org.apache.log4j.Level;
-
-import java.io.BufferedReader;
-//import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.FileInputStream;
-//import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-//import java.net.ProtocolException;
-import java.net.URL;
-//import java.nio.charset.StandardCharsets;
-import java.security.KeyStore;
-
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManagerFactory;
-
-import org.apache.log4j.BasicConfigurator;
-
-/**
- * @author Gokul Singaraju
- */
-
-
-public class AgentMain {
-
-/**************************************************************************//**
- * Error codes
- *
- * Error codes for EVEL low level interface
- *****************************************************************************/
-public enum EVEL_ERR_CODES {
- EVEL_SUCCESS, /** The operation was successful. */
- EVEL_ERR_GEN_FAIL, /** Non-specific failure. */
- EVEL_CURL_LIBRARY_FAIL, /** A cURL library operation failed. */
- EVEL_PTHREAD_LIBRARY_FAIL, /** A Posix threads operation failed. */
- EVEL_OUT_OF_MEMORY, /** A memory allocation failure occurred. */
- EVEL_EVENT_BUFFER_FULL, /** Too many events in the ring-buffer. */
- EVEL_EVENT_HANDLER_INACTIVE, /** Attempt to raise event when inactive. */
- EVEL_NO_METADATA, /** Failed to retrieve OpenStack metadata. */
- EVEL_BAD_METADATA, /** OpenStack metadata invalid format. */
- EVEL_BAD_JSON_FORMAT, /** JSON failed to parse correctly. */
- EVEL_JSON_KEY_NOT_FOUND, /** Failed to find the specified JSON key. */
- EVEL_MAX_ERROR_CODES /** Maximum number of valid error codes. */
-}
-
- private static final Logger logger = Logger.getLogger(AgentMain.class);
-
- private static String url = null;
- private static URL vesurl = null;
- private static URL vesbatchurl = null;
- private static HttpURLConnection con = null;
- private static String userpass = null;
- private static String keystore_pth = null;
- private static String jks_passw = null;
- private static String key_passw = null;
- private static String version = "5";
-
- /* RingBuffer to forward messages on sending AgentDispatcher thread */
- private static RingBuffer ringb = new RingBuffer(100);
-
- Thread thr;
-
- /* AgentDispatcher loops on messages in RingBuffer and POSTs them
- * to external Collector
- */
- private static class AgentDispatcher implements Runnable {
-
- private String readStream(InputStream stream) throws Exception {
- StringBuilder builder = new StringBuilder();
- try (BufferedReader in = new BufferedReader(new InputStreamReader(stream))) {
- String line;
- while ((line = in.readLine()) != null) {
- builder.append(line); // + "\r\n"(no need, json has no line breaks!)
- }
- in.close();
- }
- logger.error("Resp: " + builder.toString());
- System.out.println("Resp: " + builder.toString());
- return builder.toString();
- }
-
- public void run() {
-
- String datatosend=null;
- for(;;){
- EvelObject tosend = ringb.take();
- if( tosend != null && ((datatosend = (String) tosend.datastr) != null))
- {
- //process data
- logger.trace(url + "Got an event size "+datatosend.length());
- logger.trace(datatosend);
-
- try {
-
- //HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
- if( tosend.type == false)
- con = (HttpURLConnection) vesurl.openConnection();
- else
- con = (HttpURLConnection) vesbatchurl.openConnection();
-
- if (con instanceof HttpsURLConnection) {
- HttpsURLConnection httpsConnection = (HttpsURLConnection) con;
-
- try {
-
- SSLContext sc = SSLContext.getInstance("TLSv1.2");
- /* Get the JKS contents */
- if( !keystore_pth.isEmpty() && !jks_passw.isEmpty() && !key_passw.isEmpty() )
- {
- final KeyStore keyStore = KeyStore.getInstance("JKS");
- try (final InputStream is = new FileInputStream(keystore_pth)) {
- keyStore.load(is, jks_passw.toCharArray());
- }
- final KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
- .getDefaultAlgorithm());
- kmf.init(keyStore, key_passw.toCharArray());
- final TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory
- .getDefaultAlgorithm());
- tmf.init(keyStore);
- sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), new java.security.SecureRandom());
- }
- else
- {
- // Init the SSLContext with a TrustManager[] and SecureRandom()
- sc.init(null, null, new java.security.SecureRandom());
- }
- httpsConnection.setSSLSocketFactory(sc.getSocketFactory());
- httpsConnection.setHostnameVerifier(new HostnameVerifier()
- {
- public boolean verify(String hostname, SSLSession session)
- {
- return true;
- }
- });
- con = httpsConnection;
-
- }
- catch (final Exception exc) {
- exc.printStackTrace();
- }
- }
-
- //add reuqest header
- con.setRequestMethod("POST");
- //con.setRequestProperty("User-Agent", USER_AGENT);
- //con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
- // No caching, we want the real thing.
- con.setUseCaches (false);
- // Specify the content type.
- con.setRequestProperty("Content-Type", "application/json");
- //con.setChunkedStreamingMode(0);
- con.setInstanceFollowRedirects( false );
- //Basic username password authentication
- String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes("UTF-8"));
- con.setRequestProperty ("Authorization", basicAuth);
-
- con.setReadTimeout(15000 /* milliseconds */);
- con.setConnectTimeout(15000 /* milliseconds */);
- // Send post request
- con.setDoOutput(true);
- con.setDoInput(true);
-
- con.setFixedLengthStreamingMode(datatosend.length());
- OutputStream os = con.getOutputStream();
- BufferedWriter writer = new BufferedWriter(
- new OutputStreamWriter(os, "UTF-8"));
- //Call writer POST
- writer.write(datatosend);
- writer.flush();
- writer.close();
- os.close();
- //Handle the response code for POST request
- int respCode = con.getResponseCode();
- logger.trace(url + "Connection HTTP Response code :"+respCode);
- if(respCode < HttpURLConnection.HTTP_OK ) {
- logger.trace(url + " **INFO**");
- }
- else if(respCode >= HttpURLConnection.HTTP_OK && respCode < HttpURLConnection.HTTP_MULT_CHOICE )
- {
- logger.trace(url + " **OK**");
- }
- else if(respCode >= HttpURLConnection.HTTP_MULT_CHOICE && respCode < HttpURLConnection.HTTP_BAD_REQUEST )
- {
- logger.warn(url + " **REDIRECTION**");
- }
- else if(respCode >= HttpURLConnection.HTTP_BAD_REQUEST )
- {
- logger.warn(url + " **SERVER ERROR**");
-
- InputStream es = con.getErrorStream();
- readStream(es);
- }
-
-
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
- else
- {
- logger.trace(url + "Waiting for events");
- try {
- Thread.sleep(5);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }//end for
- }//end run
- }//end AgentDispatcher
- // Validate URL
- public static boolean isValidURL(String urlStr) {
- try {
- URL url = new URL(urlStr);
- return true;
- }
- catch (MalformedURLException e) {
- return false;
- }
- }
-
- /**************************************************************************//**
- * Library initialization.
- *
- * Initialize the EVEL library.
- *
- * @note This function initializes the Java EVEL library interfaces.
- * Validates input parameters and starts the AgentDispatcher thread
- *
- * @param event_api_url The API's URL.
- * @param port The API's port.
- * @param path The optional path (may be NULL).
- * @param topic The optional topic part of the URL (may be NULL).
- * @param username Username for Basic Authentication of requests.
- * @param password Password for Basic Authentication of requests.
- * @param Level Java Log levels.
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval ::EVEL_ERR_CODES On failure.
- *****************************************************************************/
- public static EVEL_ERR_CODES evel_initialize(
- String event_api_url,
- int port,
- String path,
- String topic,
- String username,
- String password,
- String keystore_path,
- String jks_password,
- String key_password,
- Level level) throws IOException
- {
- EVEL_ERR_CODES rc = EVEL_ERR_CODES.EVEL_SUCCESS;
- String throt_api_url = "http://127.0.0.1";
-
- EVEL_ENTER();
-
- BasicConfigurator.configure();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(event_api_url != null);
- assert(port > 1024);
- assert(throt_api_url != null);
- assert(username != null);
-
- logger.setLevel(level);
-
- if( !isValidURL(event_api_url) || !isValidURL(throt_api_url)){
- System.out.println("Invalid Event API URL");
- rc = EVEL_ERR_CODES.EVEL_ERR_GEN_FAIL;
- System.exit(1);
- }
-
- if(path == null){
- path = "";
- } else {
- version += "/example_vnf";
- }
-
- keystore_pth = keystore_path;
- jks_passw = jks_password;
- key_passw = key_password;
-
- url = event_api_url+":"+Integer.toString(port)+path+"/eventListener/v"+version;
- vesurl = null;
- try {
- vesurl = new URL(url);
- vesbatchurl = new URL(url+"/eventBatch");
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- logger.info("Error in url input");
- e.printStackTrace();
- System.exit(1);
- }
- userpass = username + ":" + password;
-
- logger.info("Starting Agent Dispatcher thread");
- long startTime = System.currentTimeMillis();
- Thread t = new Thread(new AgentDispatcher());
- t.start();
-
- EVEL_EXIT();
- return rc;
-
- }
-
- private static void EVEL_EXIT() {
- // TODO Auto-generated method stub
-
- }
-
- private static void EVEL_ENTER() {
- // TODO Auto-generated method stub
-
- }
-
- /**************************************************************************//**
- * Handle user formatted post message
- *
- * @note This function handles VES 5.x formatted messages from all valid
- * Domains and stores them in RingBuffer.
- *
- * @param obj VES 5.x formatted user messages with common header
- * and optional specialized body
- *
- * @retval boolean True On successful acceptance False on failure
- *****************************************************************************/
-
- public static boolean evel_post_event(EvelHeader obj)
- {
- String data = obj.evel_json_encode_event().toString();
- EvelObject myobj = new EvelObject(data,false);
- boolean ret = ringb.put(myobj);
- logger.info("Evel Post event ret:"+ret);
- return ret;
- }
-
-
- /**************************************************************************//**
- * Handle user formatted post message
- *
- * @note This function handles VES 5.x formatted messages from all valid
- * Domains and stores them in RingBuffer.
- *
- * @param obj VES 5.x formatted user messages with common header
- * and optional specialized body
- *
- * @retval boolean True On successful acceptance False on failure
- *****************************************************************************/
-
- public static boolean evel_post_event(EvelBatch obj)
- {
- String data = obj.evel_json_encode_event().toString();
- EvelObject myobj = new EvelObject(data,true);
- boolean ret = ringb.put(myobj);
- logger.info("Evel Post batch event ret:"+ret);
- return ret;
- }
-
-
-}