diff options
Diffstat (limited to 'sdnr/wt')
60 files changed, 5287 insertions, 1681 deletions
diff --git a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/DatabaseClient.java b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/DatabaseClient.java index 63e265bd1..59579c856 100644 --- a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/DatabaseClient.java +++ b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/DatabaseClient.java @@ -167,6 +167,16 @@ public interface DatabaseClient { */ SearchResult<SearchHit> doReadAllJsonData(String dataTypeName, boolean ignoreException); + /** + * @param alias + * @param dataTypeName + * @param queryBuilder + * @param ignoreException + * @return + */ + SearchResult<SearchHit> doReadByQueryJsonData(String alias, String dataTypeName, QueryBuilder queryBuilder, + boolean ignoreException); + } diff --git a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/ExtRestClient.java b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/ExtRestClient.java index 5ef326f41..a64b56bef 100644 --- a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/ExtRestClient.java +++ b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/ExtRestClient.java @@ -18,18 +18,28 @@ package org.onap.ccsdk.features.sdnr.wt.common.database; import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.security.spec.InvalidKeySpecException; import java.text.ParseException; +import javax.net.ssl.SSLContext; + import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.config.RequestConfig.Builder; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.elasticsearch.client.Response; import org.elasticsearch.client.ResponseException; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback; +import org.elasticsearch.client.RestClientBuilder.RequestConfigCallback; import org.json.JSONException; import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo; import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo.Protocol; @@ -70,252 +80,275 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.responses.RefreshIndexRes import org.onap.ccsdk.features.sdnr.wt.common.database.responses.SearchResponse; import org.onap.ccsdk.features.sdnr.wt.common.database.responses.UpdateByQueryResponse; import org.onap.ccsdk.features.sdnr.wt.common.database.responses.UpdateResponse; +import org.onap.ccsdk.features.sdnr.wt.common.http.BaseHTTPClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExtRestClient { - private static final Logger LOG = LoggerFactory.getLogger(ExtRestClient.class); - - private class BasicAuthHttpClientConfigCallback implements HttpClientConfigCallback { - - private final String basicAuthUsername; - private final String basicAuthPassword; - - BasicAuthHttpClientConfigCallback(String username, String password) { - this.basicAuthUsername = username; - this.basicAuthPassword = password; - } - - @Override - public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { - if (basicAuthPassword == null || basicAuthUsername == null) { - return httpClientBuilder; - } - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, - new UsernamePasswordCredentials(basicAuthUsername, basicAuthPassword)); - - return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); - } - - } -// private class SSLCercAuthHttpClientConfigCallback implements HttpClientConfigCallback { -// -// private final String certFilename; -// -// SSLCercAuthHttpClientConfigCallback(String certfile) { -// this.certFilename = certfile; -// } -// -// @Override -// public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { -// if (this.certFilename == null) { -// return httpClientBuilder; -// } -// -// char[] keystorePass = "MY PASSWORD".toCharArray(); -// -// FileInputStream fis = null; -// -// // Loading KEYSTORE in JKS format -// KeyStore keyStorePci = null; -// try { -// keyStorePci = KeyStore.getInstance(KeyStore.getDefaultType()); -// } catch (KeyStoreException e1) { -// LOG.warn("unable to load keystore: {}",e1); -// } -// if (keyStorePci != null) { -// try { -// fis = new FileInputStream(this.certFilename); -// keyStorePci.load(fis, keystorePass); -// } catch (Exception e) { -// LOG.error("Error loading keystore: " + this.certFilename); -// } finally { -// if (fis != null) { -// try { -// fis.close(); -// } catch (IOException e) { -// -// } -// } -// } -// } -// SSLContext sslcontext=null; -// try { -// sslcontext = SSLContexts.custom().loadKeyMaterial(keyStorePci, keystorePass).build(); -// } catch (KeyManagementException | UnrecoverableKeyException | NoSuchAlgorithmException -// | KeyStoreException e) { -// LOG.warn("unable to load sslcontext: {}",e); -// } -// return httpClientBuilder.setSSLContext(sslcontext); -// } -// } - - private final RestClient client; - - protected ExtRestClient(HostInfo[] hosts) { - this(hosts, null, null); - } - protected ExtRestClient(HostInfo[] hosts,String username,String password) { - this.client = RestClient.builder(get(hosts)).setHttpClientConfigCallback(new BasicAuthHttpClientConfigCallback(username, password) ).build(); - } - - public ClusterHealthResponse health(ClusterHealthRequest request) - throws UnsupportedOperationException, IOException, JSONException { - return new ClusterHealthResponse(this.client.performRequest(request.getInner())); - } - - public void close() throws IOException { - this.client.close(); - - } - // - public boolean indicesExists(GetIndexRequest request) throws IOException { - Response response = this.client.performRequest(request.getInner()); - return response.getStatusLine().getStatusCode()==200; - } - - public AcknowledgedResponse updateAliases(IndicesAliasesRequest request) throws IOException{ - return new AcknowledgedResponse(this.client.performRequest(request.getInner())); - } - - public CreateIndexResponse createIndex(CreateIndexRequest request) throws IOException { - return new CreateIndexResponse(this.client.performRequest(request.getInner())); - } - public CreateAliasResponse createAlias(CreateAliasRequest request) throws IOException { + private static final Logger LOG = LoggerFactory.getLogger(ExtRestClient.class); + + private class BasicAuthHttpClientConfigCallback implements HttpClientConfigCallback { + + private final String basicAuthUsername; + private final String basicAuthPassword; + private final boolean trustAll; + + BasicAuthHttpClientConfigCallback(String username, String password, boolean trustAll) { + this.basicAuthUsername = username; + this.basicAuthPassword = password; + this.trustAll = trustAll; + } + + @Override + public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { + HttpAsyncClientBuilder httpAsyncClientBuilder = null; + try { + httpAsyncClientBuilder = httpClientBuilder.setSSLContext(BaseHTTPClient.setupSsl(this.trustAll)); + } catch (NoSuchAlgorithmException | KeyManagementException | UnrecoverableKeyException | CertificateException | KeyStoreException | InvalidKeySpecException | IOException e) { + LOG.warn("unable to init ssl context for db client: {}",e.getMessage()); + } + if (basicAuthPassword == null || basicAuthUsername == null) { + return httpAsyncClientBuilder; + } + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(basicAuthUsername, basicAuthPassword)); + + return httpAsyncClientBuilder == null ? httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider) + : httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider); + } + + } + // private class SSLCercAuthHttpClientConfigCallback implements HttpClientConfigCallback { + // + // private final String certFilename; + // + // SSLCercAuthHttpClientConfigCallback(String certfile) { + // this.certFilename = certfile; + // } + // + // @Override + // public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { + // if (this.certFilename == null) { + // return httpClientBuilder; + // } + // + // char[] keystorePass = "MY PASSWORD".toCharArray(); + // + // FileInputStream fis = null; + // + // // Loading KEYSTORE in JKS format + // KeyStore keyStorePci = null; + // try { + // keyStorePci = KeyStore.getInstance(KeyStore.getDefaultType()); + // } catch (KeyStoreException e1) { + // LOG.warn("unable to load keystore: {}",e1); + // } + // if (keyStorePci != null) { + // try { + // fis = new FileInputStream(this.certFilename); + // keyStorePci.load(fis, keystorePass); + // } catch (Exception e) { + // LOG.error("Error loading keystore: " + this.certFilename); + // } finally { + // if (fis != null) { + // try { + // fis.close(); + // } catch (IOException e) { + // + // } + // } + // } + // } + // SSLContext sslcontext=null; + // try { + // sslcontext = SSLContexts.custom().loadKeyMaterial(keyStorePci, keystorePass).build(); + // } catch (KeyManagementException | UnrecoverableKeyException | NoSuchAlgorithmException + // | KeyStoreException e) { + // LOG.warn("unable to load sslcontext: {}",e); + // } + // return httpClientBuilder.setSSLContext(sslcontext); + // } + // } + + private final RestClient client; + + protected ExtRestClient(HostInfo[] hosts) { + this(hosts, null, null,false); + } + + protected ExtRestClient(HostInfo[] hosts, String username, String password, boolean trustAll) { + this.client = RestClient.builder(get(hosts)) + .setHttpClientConfigCallback(new BasicAuthHttpClientConfigCallback(username, password,trustAll)) + .build(); + } + + public ClusterHealthResponse health(ClusterHealthRequest request) + throws UnsupportedOperationException, IOException, JSONException { + return new ClusterHealthResponse(this.client.performRequest(request.getInner())); + } + + public void close() throws IOException { + this.client.close(); + + } + + // + public boolean indicesExists(GetIndexRequest request) throws IOException { + Response response = this.client.performRequest(request.getInner()); + return response.getStatusLine().getStatusCode() == 200; + } + + public AcknowledgedResponse updateAliases(IndicesAliasesRequest request) throws IOException { + return new AcknowledgedResponse(this.client.performRequest(request.getInner())); + } + + public CreateIndexResponse createIndex(CreateIndexRequest request) throws IOException { + return new CreateIndexResponse(this.client.performRequest(request.getInner())); + } + + public CreateAliasResponse createAlias(CreateAliasRequest request) throws IOException { return new CreateAliasResponse(this.client.performRequest(request.getInner())); } - public DeleteAliasResponse deleteAlias(DeleteAliasRequest request) throws IOException { + + public DeleteAliasResponse deleteAlias(DeleteAliasRequest request) throws IOException { return new DeleteAliasResponse(this.client.performRequest(request.getInner())); } - public DeleteIndexResponse deleteIndex(DeleteIndexRequest request) throws IOException { - return new DeleteIndexResponse(this.client.performRequest(request.getInner())); - } - public IndexResponse index(IndexRequest request) throws IOException{ - return new IndexResponse(this.client.performRequest(request.getInner())); - } - - public DeleteResponse delete(DeleteRequest request) throws IOException{ - Response response=null; - try { - response = this.client.performRequest(request.getInner()); - } - catch(ResponseException e) { - new DeleteResponse(e.getResponse()); - } - return new DeleteResponse(response); - } - public DeleteByQueryResponse deleteByQuery(DeleteByQueryRequest request) throws IOException { - Response response=null; - try { - response = this.client.performRequest(request.getInner()); - } - catch(ResponseException e) { - new DeleteResponse(e.getResponse()); - } - return new DeleteByQueryResponse(response); - } - public SearchResponse search(SearchRequest request) throws IOException{ - return this.search(request,false); - } - - /** - * Search for database entries - * @param request inputRequest - * @param ignoreParseException especially for usercreated filters which may cause ES server response exceptions - * @return Response with related entries - * @throws IOException of client - */ - public SearchResponse search(SearchRequest request, boolean ignoreParseException) throws IOException { - if (ignoreParseException) { - try { - return new SearchResponse(this.client.performRequest(request.getInner())); - } catch (ResponseException e) { - LOG.debug("ignoring Exception for request {}: {}",request,e.getMessage()); - return new SearchResponse(e.getResponse()); - } - } else { - return new SearchResponse(this.client.performRequest(request.getInner())); - } - } - - public GetResponse get(GetRequest request) throws IOException{ - try { - return new GetResponse(this.client.performRequest(request.getInner())); - } - catch (ResponseException e) { - return new GetResponse(e.getResponse()); - } - } - - - public UpdateByQueryResponse update(UpdateByQueryRequest request) throws IOException { - return new UpdateByQueryResponse(this.client.performRequest(request.getInner())); - - } - public UpdateResponse update(UpdateRequest request) throws IOException { - return new UpdateResponse(this.client.performRequest(request.getInner())); - - } - public RefreshIndexResponse refreshIndex(RefreshIndexRequest request) throws IOException{ - return new RefreshIndexResponse(this.client.performRequest(request.getInner())); - } - - public NodeStatsResponse stats(NodeStatsRequest request) throws IOException{ - return new NodeStatsResponse(this.client.performRequest(request.getInner())); - } - public ListIndicesResponse getIndices() throws ParseException, IOException { - return new ListIndicesResponse(this.client.performRequest(new ListIndicesRequest().getInner())); - } - public ListAliasesResponse getAliases() throws ParseException, IOException { - return new ListAliasesResponse(this.client.performRequest(new ListAliasesRequest().getInner())); - } - public GetInfoResponse getInfo() throws IOException, Exception { - return new GetInfoResponse(this.client.performRequest(new GetInfoRequest().getInner())); - } - public boolean waitForYellowStatus(long timeoutms) { - - ClusterHealthRequest request = new ClusterHealthRequest(); - request.timeout(timeoutms/1000); - ClusterHealthResponse response = null; - String status=""; - try { - response = this.health(request); - - } catch (UnsupportedOperationException | IOException | JSONException e) { - LOG.error(e.getMessage()); - } - if(response!=null) { - status=response.getStatus(); - LOG.debug("Elasticsearch service started with status {}", response.getStatus()); - - } - else { - LOG.warn("Elasticsearch service not started yet with status {}. current status is {}",status,"none"); - return false; - } - return response.isStatusMinimal(ClusterHealthResponse.HEALTHSTATUS_YELLOW); - - } - - private static HttpHost[] get(HostInfo[] hosts) { - HttpHost[] httphosts = new HttpHost[hosts.length]; - for(int i=0;i<hosts.length;i++) { - httphosts[i]=new HttpHost(hosts[i].hostname, hosts[i].port, hosts[i].protocol.toString()); - } - return httphosts; - } - public static ExtRestClient createInstance(HostInfo[] hosts) { - return new ExtRestClient(hosts); - } - public static ExtRestClient createInstance(HostInfo[] hosts,String username,String password) { - return new ExtRestClient(hosts,username,password); - } - public static ExtRestClient createInstance(String hostname, int port, Protocol protocol){ - return createInstance(new HostInfo[] {new HostInfo(hostname,port,protocol)}); - - } + public DeleteIndexResponse deleteIndex(DeleteIndexRequest request) throws IOException { + return new DeleteIndexResponse(this.client.performRequest(request.getInner())); + } + + public IndexResponse index(IndexRequest request) throws IOException { + return new IndexResponse(this.client.performRequest(request.getInner())); + } + + public DeleteResponse delete(DeleteRequest request) throws IOException { + Response response = null; + try { + response = this.client.performRequest(request.getInner()); + } catch (ResponseException e) { + new DeleteResponse(e.getResponse()); + } + return new DeleteResponse(response); + } + + public DeleteByQueryResponse deleteByQuery(DeleteByQueryRequest request) throws IOException { + Response response = null; + try { + response = this.client.performRequest(request.getInner()); + } catch (ResponseException e) { + new DeleteResponse(e.getResponse()); + } + return new DeleteByQueryResponse(response); + } + + public SearchResponse search(SearchRequest request) throws IOException { + return this.search(request, false); + } + + /** + * Search for database entries + * @param request inputRequest + * @param ignoreParseException especially for usercreated filters which may cause ES server response exceptions + * @return Response with related entries + * @throws IOException of client + */ + public SearchResponse search(SearchRequest request, boolean ignoreParseException) throws IOException { + if (ignoreParseException) { + try { + return new SearchResponse(this.client.performRequest(request.getInner())); + } catch (ResponseException e) { + LOG.debug("ignoring Exception for request {}: {}", request, e.getMessage()); + return new SearchResponse(e.getResponse()); + } + } else { + return new SearchResponse(this.client.performRequest(request.getInner())); + } + } + + public GetResponse get(GetRequest request) throws IOException { + try { + return new GetResponse(this.client.performRequest(request.getInner())); + } catch (ResponseException e) { + return new GetResponse(e.getResponse()); + } + } + + public UpdateByQueryResponse update(UpdateByQueryRequest request) throws IOException { + return new UpdateByQueryResponse(this.client.performRequest(request.getInner())); + + } + + public UpdateResponse update(UpdateRequest request) throws IOException { + return new UpdateResponse(this.client.performRequest(request.getInner())); + + } + + public RefreshIndexResponse refreshIndex(RefreshIndexRequest request) throws IOException { + return new RefreshIndexResponse(this.client.performRequest(request.getInner())); + } + + public NodeStatsResponse stats(NodeStatsRequest request) throws IOException { + return new NodeStatsResponse(this.client.performRequest(request.getInner())); + } + + public ListIndicesResponse getIndices() throws ParseException, IOException { + return new ListIndicesResponse(this.client.performRequest(new ListIndicesRequest().getInner())); + } + + public ListAliasesResponse getAliases() throws ParseException, IOException { + return new ListAliasesResponse(this.client.performRequest(new ListAliasesRequest().getInner())); + } + + public GetInfoResponse getInfo() throws IOException, Exception { + return new GetInfoResponse(this.client.performRequest(new GetInfoRequest().getInner())); + } + + public boolean waitForYellowStatus(long timeoutms) { + + ClusterHealthRequest request = new ClusterHealthRequest(); + request.timeout(timeoutms / 1000); + ClusterHealthResponse response = null; + String status = ""; + try { + response = this.health(request); + + } catch (UnsupportedOperationException | IOException | JSONException e) { + LOG.error(e.getMessage()); + } + if (response != null) { + status = response.getStatus(); + LOG.debug("Elasticsearch service started with status {}", response.getStatus()); + + } else { + LOG.warn("Elasticsearch service not started yet with status {}. current status is {}", status, "none"); + return false; + } + return response.isStatusMinimal(ClusterHealthResponse.HEALTHSTATUS_YELLOW); + + } + + private static HttpHost[] get(HostInfo[] hosts) { + HttpHost[] httphosts = new HttpHost[hosts.length]; + for (int i = 0; i < hosts.length; i++) { + httphosts[i] = new HttpHost(hosts[i].hostname, hosts[i].port, hosts[i].protocol.toString()); + } + return httphosts; + } + + public static ExtRestClient createInstance(HostInfo[] hosts) { + return new ExtRestClient(hosts); + } + + public static ExtRestClient createInstance(HostInfo[] hosts, String username, String password,boolean trustAll) { + return new ExtRestClient(hosts, username, password, trustAll); + } + + public static ExtRestClient createInstance(String hostname, int port, Protocol protocol) { + return createInstance(new HostInfo[] { new HostInfo(hostname, port, protocol) }); + + } } diff --git a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/HtDatabaseClient.java b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/HtDatabaseClient.java index d64f7cc01..0ec8b1fa7 100644 --- a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/HtDatabaseClient.java +++ b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/HtDatabaseClient.java @@ -26,7 +26,6 @@ import org.json.JSONObject; import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders; -import org.onap.ccsdk.features.sdnr.wt.common.database.requests.CreateAliasRequest; import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteByQueryRequest; import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteRequest; import org.onap.ccsdk.features.sdnr.wt.common.database.requests.GetIndexRequest; @@ -36,7 +35,6 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.requests.RefreshIndexRequ import org.onap.ccsdk.features.sdnr.wt.common.database.requests.SearchRequest; import org.onap.ccsdk.features.sdnr.wt.common.database.requests.UpdateByQueryRequest; import org.onap.ccsdk.features.sdnr.wt.common.database.requests.UpdateRequest; -import org.onap.ccsdk.features.sdnr.wt.common.database.responses.CreateIndexResponse; import org.onap.ccsdk.features.sdnr.wt.common.database.responses.DeleteByQueryResponse; import org.onap.ccsdk.features.sdnr.wt.common.database.responses.DeleteResponse; import org.onap.ccsdk.features.sdnr.wt.common.database.responses.GetResponse; @@ -58,6 +56,7 @@ import org.slf4j.LoggerFactory; public class HtDatabaseClient extends ExtRestClient implements DatabaseClient, AutoCloseable { private static final boolean REFRESH_AFTER_REWRITE_DEFAULT = true; + private static final boolean TRUSTALL_DEFAULT = false; private final Logger LOG = LoggerFactory.getLogger(HtDatabaseClient.class); @@ -66,13 +65,16 @@ public class HtDatabaseClient extends ExtRestClient implements DatabaseClient, A this(hosts,REFRESH_AFTER_REWRITE_DEFAULT); } public HtDatabaseClient(HostInfo[] hosts, boolean refreshAfterWrite) { - this(hosts,refreshAfterWrite,null,null); + this(hosts,refreshAfterWrite,null,null,TRUSTALL_DEFAULT); } public HtDatabaseClient(HostInfo[] hosts,String username,String password) { - this(hosts,REFRESH_AFTER_REWRITE_DEFAULT,username,password); + this(hosts,username,password,TRUSTALL_DEFAULT); + } + public HtDatabaseClient(HostInfo[] hosts,String username,String password, boolean trustAll) { + this(hosts,REFRESH_AFTER_REWRITE_DEFAULT,username,password,trustAll); } - public HtDatabaseClient(HostInfo[] hosts, boolean refreshAfterWrite,String username,String password) { - super(hosts,username,password); + public HtDatabaseClient(HostInfo[] hosts, boolean refreshAfterWrite,String username,String password, boolean trustAll) { + super(hosts,username,password,trustAll); this.doRefreshAfterWrite = refreshAfterWrite; } @@ -203,14 +205,17 @@ public class HtDatabaseClient extends ExtRestClient implements DatabaseClient, A return this.doReadByQueryJsonData(dataTypeName, queryBuilder, false); } - @Override - public @Nonnull SearchResult<SearchHit> doReadByQueryJsonData(String dataTypeName,QueryBuilder queryBuilder, boolean ignoreException) { + public @Nonnull SearchResult<SearchHit> doReadByQueryJsonData( String dataTypeName,QueryBuilder queryBuilder, boolean ignoreException) { + return this.doReadByQueryJsonData(dataTypeName, dataTypeName,queryBuilder,ignoreException); + } + @Override + public @Nonnull SearchResult<SearchHit> doReadByQueryJsonData(String alias, String dataTypeName,QueryBuilder queryBuilder, boolean ignoreException) { long total = 0; LOG.debug("NetworkIndex query and read: {}", dataTypeName); - SearchRequest searchRequest = new SearchRequest(dataTypeName, dataTypeName); + SearchRequest searchRequest = new SearchRequest(alias, dataTypeName); searchRequest.setQuery(queryBuilder); SearchResponse response = null; try { @@ -228,11 +233,12 @@ public class HtDatabaseClient extends ExtRestClient implements DatabaseClient, A } @Override public @Nonnull SearchResult<SearchHit> doReadAllJsonData( String dataTypeName, boolean ignoreException) { - // Use query - return doReadByQueryJsonData( dataTypeName, QueryBuilders.matchAllQuery(),ignoreException); + return doReadByQueryJsonData( dataTypeName, QueryBuilders.matchAllQuery(),ignoreException); } - + public @Nonnull SearchResult<SearchHit> doReadAllJsonData(String alias, String dataType, boolean ignoreException) { + return doReadByQueryJsonData( alias, dataType, QueryBuilders.matchAllQuery(),ignoreException); + } @Override public String doUpdateOrCreate(String dataTypeName, String esId, String json) { return this.doUpdateOrCreate(dataTypeName, esId, json,null); @@ -296,4 +302,5 @@ public class HtDatabaseClient extends ExtRestClient implements DatabaseClient, A return del; } + } diff --git a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntry.java b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntry.java index 73d50db83..1c1c4ecd3 100644 --- a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntry.java +++ b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntry.java @@ -1,20 +1,24 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * 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 +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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 + * 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. - * ============LICENSE_END========================================================================== - ******************************************************************************/ + * 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. + * ============LICENSE_END========================================================= + * + */ package org.onap.ccsdk.features.sdnr.wt.common.database.data; import java.text.ParseException; diff --git a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntryList.java b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntryList.java index a3a8e728d..3891ecfb7 100644 --- a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntryList.java +++ b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/AliasesEntryList.java @@ -1,23 +1,28 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * 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 +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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 + * 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. - * ============LICENSE_END========================================================================== - ******************************************************************************/ + * 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. + * ============LICENSE_END========================================================= + * + */ package org.onap.ccsdk.features.sdnr.wt.common.database.data; import java.util.ArrayList; +import java.util.List; /** * @author Michael Dürre @@ -43,4 +48,15 @@ public class AliasesEntryList extends ArrayList<AliasesEntry>{ return null; } + /** + * @return + */ + public List<String> getLinkedIndices() { + List<String> list = new ArrayList<String>(); + for(AliasesEntry e:this) { + list.add(e.getIndex()); + } + return list; + } + } diff --git a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntry.java b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntry.java index 760f9ff70..26e088d3f 100644 --- a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntry.java +++ b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntry.java @@ -1,20 +1,24 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * 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 +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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 + * 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. - * ============LICENSE_END========================================================================== - ******************************************************************************/ + * 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. + * ============LICENSE_END========================================================= + * + */ package org.onap.ccsdk.features.sdnr.wt.common.database.data; import java.text.ParseException; @@ -32,7 +36,10 @@ public class IndicesEntry { private static final String regex = "^(yellow|red|green)[\\ ]+([^\\ ]*)[\\ ]+([^\\ ]*)[\\ ]+([^\\ ]*)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([^\\ ]+)[\\ ]+([^\\ ]+)$"; private static final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); - + //for ES 2.2.0 + private static final String regexOld = "^(yellow|red|green)[\\ ]+([^\\ ]*)[\\ ]+([^\\ ]*)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([0-9]+)[\\ ]+([^\\ ]+)[\\ ]+([^\\ ]+)$"; + private static final Pattern patternOld = Pattern.compile(regexOld, Pattern.MULTILINE); + private final String status; private final String status2; private final String name; @@ -85,20 +92,33 @@ public class IndicesEntry { } public IndicesEntry(String line) throws ParseException { - final Matcher matcher = pattern.matcher(line); - if(!matcher.find() || matcher.groupCount()<10) { - throw new ParseException("unable to parse string:" +line,0); + Matcher matcher = pattern.matcher(line.trim()); + if (!matcher.find() || matcher.groupCount() < 10) { + matcher = patternOld.matcher(line.trim()); + if (!matcher.find() || matcher.groupCount() < 9) { + throw new ParseException("unable to parse string:" + line, 0); + } + this.status = matcher.group(1); + this.status2 = matcher.group(2); + this.name = matcher.group(3); + this.hash = ""; + this.shards = Integer.parseInt(matcher.group(4)); + this.replicas = Integer.parseInt(matcher.group(5)); + this.c1 = Integer.parseInt(matcher.group(6)); + this.c2 = Integer.parseInt(matcher.group(7)); + this.size1 = matcher.group(8); + this.size2 = matcher.group(9); + } else { + this.status = matcher.group(1); + this.status2 = matcher.group(2); + this.name = matcher.group(3); + this.hash = matcher.group(4); + this.shards = Integer.parseInt(matcher.group(5)); + this.replicas = Integer.parseInt(matcher.group(6)); + this.c1 = Integer.parseInt(matcher.group(7)); + this.c2 = Integer.parseInt(matcher.group(8)); + this.size1 = matcher.group(9); + this.size2 = matcher.group(10); } - this.status = matcher.group(1); - this.status2 = matcher.group(2); - this.name = matcher.group(3); - this.hash = matcher.group(4); - this.shards = Integer.parseInt(matcher.group(5)); - this.replicas = Integer.parseInt(matcher.group(6)); - this.c1 = Integer.parseInt(matcher.group(7)); - this.c2 = Integer.parseInt(matcher.group(8)); - this.size1 = matcher.group(9); - this.size2 = matcher.group(10); - } } diff --git a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntryList.java b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntryList.java index 0931b44a5..5431db9e7 100644 --- a/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntryList.java +++ b/sdnr/wt/common/src/main/java/org/onap/ccsdk/features/sdnr/wt/common/database/data/IndicesEntryList.java @@ -1,23 +1,28 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * 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 +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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 + * 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. - * ============LICENSE_END========================================================================== - ******************************************************************************/ + * 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. + * ============LICENSE_END========================================================= + * + */ package org.onap.ccsdk.features.sdnr.wt.common.database.data; import java.util.ArrayList; +import java.util.List; /** * @author Michael Dürre @@ -43,4 +48,18 @@ public class IndicesEntryList extends ArrayList<IndicesEntry>{ return null; } + /** + * @param indices + * @return + */ + public IndicesEntryList subList(List<String> indices) { + IndicesEntryList sublist = new IndicesEntryList(); + for(IndicesEntry e:this) { + if(indices.contains(e.getName())) { + sublist.add(e); + } + } + return sublist; + } + } diff --git a/sdnr/wt/data-provider/README.md b/sdnr/wt/data-provider/README.md index e8edcb906..34e2aeda4 100644 --- a/sdnr/wt/data-provider/README.md +++ b/sdnr/wt/data-provider/README.md @@ -3,10 +3,22 @@ Data-provider bundle manages all access to SDN-R database. Database is actually ElasticSearch. -## ES-INIT Script +## Initilization Central SDN-R script initializing and preparing the database BEFORE SDN-R usage. +### sdnr-dmt.jar Tool + +Initialization and migration tool for elasticsearch database + +Reference: https://wiki.onap.org/display/DW/SDN-R+Data+Migration+Tool + +Example: +<code>java -jar $ODL_HOME/system/org/onap/ccsdk/features/sdnr/wt/sdnr-wt-data-provider-setup/0.7.1-SNAPSHOT/sdnr-dmt.jar -c init -db $SDNRDBURL -dbu $SDNRDBUSERNAME -dbp $SDNRDBPASSWORD</code> + + +### ES-INIT Script (deprecated) + Name: es-init.sh Dir: provider/src/main/resources diff --git a/sdnr/wt/data-provider/installer/pom.xml b/sdnr/wt/data-provider/installer/pom.xml index 7e66a381f..6dfbc9b97 100755 --- a/sdnr/wt/data-provider/installer/pom.xml +++ b/sdnr/wt/data-provider/installer/pom.xml @@ -64,6 +64,12 @@ <artifactId>${application.name}-provider</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <artifactId>${application.name}-setup</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> <build> @@ -116,6 +122,24 @@ <version>2.6</version> <executions> <execution> + <id>copy-sdnr-data-migration-tool</id> + <goals> + <goal>copy-resources</goal> + </goals> + <phase>validate</phase> + <configuration> + <outputDirectory>${project.build.directory}/assembly/system/org/onap/ccsdk/features/sdnr/wt/sdnr-wt-data-provider-setup/${project.version}</outputDirectory> + <resources> + <resource> + <directory>${basedir}/../setup/target</directory> + <includes> + <include>sdnr-dmt.jar</include> + </includes> + </resource> + </resources> + </configuration> + </execution> + <execution> <id>copy-schemas</id> <goals> <goal>copy-resources</goal> diff --git a/sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/ArchiveCleanProvider.java b/sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/ArchiveCleanProvider.java index 00ec2e60e..559ed3148 100644 --- a/sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/ArchiveCleanProvider.java +++ b/sdnr/wt/data-provider/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/model/ArchiveCleanProvider.java @@ -22,7 +22,7 @@ import java.util.Date; public interface ArchiveCleanProvider { /** - * Remove all index data older, than specified + * Remove all index data older, than specified from faultlog and eventlog * @param olderAreOutdated time to specify older elements * @return number of removed elements */ diff --git a/sdnr/wt/data-provider/model/src/main/yang/data-provider.yang b/sdnr/wt/data-provider/model/src/main/yang/data-provider.yang new file mode 100644 index 000000000..ef65104e5 --- /dev/null +++ b/sdnr/wt/data-provider/model/src/main/yang/data-provider.yang @@ -0,0 +1,1662 @@ +module data-provider { + + yang-version 1.1; + namespace "urn:opendaylight:params:xml:ns:yang:data-provider"; + prefix odluxprovider; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types."; + } + + organization + "highstreet technologies GmbH"; + contact + "Web: <https://highstreet-technologies.com> + ONAP: <https://wiki.onap.org/display/DW/ODLUX+DB+API>"; + + description + "This module defines the API for the data-provider component. + + Copyright 2019 highstreet technologies GmbH Intellectual Property. + All rights reserved. + + 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."; + + revision 2019-08-01 { + description + "Initial revision"; + reference + "https://jira.onap.org/browse/SDNC-879"; + } + + // --- typedef + + typedef Entity { + type enumeration { + enum connectionlog { + description + "logs mountpoint connection state changes"; + } + enum faultcurrent { + description + "current faults"; + } + enum eventlog { + description + "logs for all notifications e.g. NetConf, ves and internal events"; + } + enum faultlog { + description + "faultlog information"; + } + enum historicalperformance15min { + description + "performance data"; + } + enum historicalperformance24h { + description + "performance data"; + } + enum mediator-server { + description + "list of mediator servers"; + } + enum networkelement-connection { + description + "list of mountpoints for NetConf devices (joint required-network-element+mdsal + state"; + } + enum inventoryequipment { + description + "list of equipment inventory"; + } + enum maintenancemode { + description + "list of maintenance setting"; + } + } + description + "Data type and alias for elasticsearch or table name for SQL database."; + } + + typedef SortOrder { + type enumeration { + enum ascending { + description + "Self explaining."; + } + enum descending { + description + "Self explaining."; + } + } + description + "Entities for odlux clients"; + } + + typedef FilterProperty { + type string; + description + "A string type describing a property (attribute, column, parameter) + filter"; + } + + typedef NotificationType { + type enumeration { + enum ProblemNotificationXml { + description + "A fault (alarm, problem) notification type in XML format."; + } + enum AttributeValueChangedNotificationXml { + description + "An attribute value change notification type in XML format."; + } + } + description + "An enumeration describing the found notification type."; + } + + typedef ConnectionLogStatus { + type enumeration { + enum Mounted { + description + "Mountpoint created"; + } + enum Unmounted { + description + "Mountpoint removed"; + } + enum Connecting { + description + "Mountpoint establishing connection"; + } + enum Connected { + description + "Mountpoint connection established"; + } + enum UnableToConnect { + description + "Mountpoint connection not possible"; + } + enum Disconnected { + description + "Required and mountpoint removed"; + } + enum Undefined { + description + "Status not available"; + } + } + description + "An enumeration describing connection states."; + } + + typedef NetworkElementDeviceType { + type enumeration { + enum Wireless { + description + "implements microwave-model.yang or air-interface.yang"; + } + enum RAN { + description + "implements sth. like o-ran*.yang"; + } + enum ORAN { + description + "implements RAN according to o-ran*.yang"; + } + enum RAN3GPP { + description + "implements RAN according to _3gpp-ran*.yang"; + } + enum Optical { + description + "implements tapi-*.yang or org-openroadm*.yang"; + } + enum Router { + description + "implements vlan-interface.yang"; + } + enum NtsManager { + description + "Simulation of device"; + } + enum Nonsupported { + description + "Device type known, but not support"; + } + enum Unknown { + description + "Device type at this point of time unknown"; + } + } + description + "An enumeration as identification of the device."; + } + + typedef severity-type { + type enumeration { + enum NonAlarmed { + description + "problem cleared indication"; + } + enum Warning { + description + "problem level"; + } + enum Minor { + description + "problem level"; + } + enum Major { + description + "problem level"; + } + enum Critical { + description + "problem level"; + } + } + description + "According to ITU-T M.3160"; + } + + typedef source-type { + type enumeration { + enum Ves { + description + "VES Interface"; + } + enum Netconf { + description + "NetConf Interface"; + } + enum Controller { + description + "SDN Controller"; + } + enum Unknown { + description + "Unknown source"; + } + } + description + "An enumeration for the information source of an event/notification."; + } + + typedef granularity-period-type { + type enumeration { + enum unknown { + description + "none"; + } + enum period-15-min { + description + "none"; + } + enum period-24-hours { + description + "none"; + } + } + description + "The enumeration with the options for granularity period of the + performance data similar to g.874.1-model"; + } + + // --- grouping and builder-container + + grouping connectionlog-entity { + leaf id { + type string; + description + "database id"; + } + leaf node-id { + type string; + description + "the node/mountpoint which connection state has changed"; + } + leaf timestamp { + type yang:date-and-time; + description + "timestamp when event happened, preferred in UTC time format."; + } + leaf status { + type ConnectionLogStatus; + description + "new state of the connection of the device"; + } + description + "An object class describing an entry in the connection status log."; + } + + container connectionlog { + description + "builder"; + uses connectionlog-entity; + } + + grouping object-change-reference { + description + "Reference of of object (e.g. Interface pack) owned by a node"; + leaf node-id { + type string; + description + "A network wide unique identifier of the NetConf server."; + } + leaf counter { + type int32; + description + "An arbitrary counter value."; + } + leaf timestamp { + type yang:date-and-time; + description + "The time of the reported change, preferred in UTC time format. "; + } + leaf object-id { + type string; + description + "The identifier of the reporting object (resource)."; + } + } + + grouping source-reference { + description + "Identify a source"; + leaf source-type { + type source-type; + description + "The source type."; + } + } + + grouping fault { + description + "Fault event of an object"; + leaf problem { + type string; + description + "The alarm type identifier."; + } + leaf severity { + type severity-type; + description + "The reported severity of the fault (alarm)."; + } + } + + grouping attribute-change { + description + "update change of an attribute"; + leaf attribute-name { + type string; + description + "The attribute name which was changed."; + } + leaf new-value { + type string; + description + "The new value of the attribute converted to a string format."; + } + } + + grouping entity-id { + description + "Unique database id of entity"; + leaf id { + type string; + description + "The unique identifier of the entity."; + } + } + + grouping faultcurrent-entity { + description + "Current fault status"; + uses object-change-reference; + uses fault; + uses entity-id; + } + + container faultcurrent { + description + "builder"; + uses faultcurrent-entity; + } + + grouping faultlog-entity { + description + "Changed fault indication"; + uses source-reference; + uses object-change-reference; + uses fault; + uses entity-id; + } + + container faultlog { + description + "builder"; + uses faultlog-entity; + } + + grouping eventlog-entity { + description + "One change event of devices"; + uses source-reference; + uses object-change-reference; + uses attribute-change; + uses entity-id; + } + + container eventlog { + description + "builder"; + uses eventlog-entity; + } + + grouping filter { + leaf description { + type string; + description + "Filter specific description"; + } + leaf start { + type yang:date-and-time; + description + "begin of maintenance-mode"; + } + leaf end { + type yang:date-and-time; + description + "end of maintenance-mode"; + } + leaf object-id-ref { + type string; + description + "object id to filter on, or empty for all"; + } + leaf problem { + type string; + description + "name of the problem to filter or empty for all"; + } + description + "An object class describing a generic filter of an interval for + faults (alarms)."; + } + + grouping maintenance-entity { + description + "Maintenance mode for a device. "; + leaf id { + type string; + mandatory true; + description + "Key to get/set configuration entry in database. Normally Mountpoint + name is used as key id of node."; + } + leaf node-id { + type string; + mandatory true; + description + "A network wide unique identifier of the NetConf server."; + } + leaf active { + type boolean; + description + "Configuration to activate or deactivate this entry"; + } + uses filter; + } + + container maintenance { + presence "false"; + description + "builder"; + uses maintenance-entity; + } + + grouping mediator-server-entity { + leaf id { + type string; + mandatory true; + description + "A network unique identifier of the mediator server."; + } + leaf url { + type string; + description + "The ULR to reach the REST interface of the mediator server."; + } + leaf name { + type string; + description + "A human readable name of the mediator server."; + } + description + "An object class describing a mediator server entity."; + } + + grouping pmdata-base { + description + "Performance data base information"; + leaf node-name { + type string; + description + "A network unique identifier of reporting NetConf server."; + } + leaf uuid-interface { + type string; + description + "A universal unique identifier of the performance monitoring point."; + } + leaf layer-protocol-name { + type string; + description + "The name of the measured transport layer."; + } + leaf radio-signal-id { + type string; + description + "The value exists only of wireless transport devices."; + } + leaf time-stamp { + type yang:date-and-time; + description + "The time-stamp of the measurement, preferred in UTC format."; + } + leaf suspect-interval-flag { + type boolean; + description + "If false, the measurement is not completed and should not be used + for performance analysis. "; + } + leaf granularity-period { + type granularity-period-type; + description + "The expected measurement interval."; + } + leaf scanner-id { + type string; + description + "See ITU-T X.739 chapter 8.1.1.2."; + } + } + + grouping pmdata-microwave { + description + "Consolidated performance information of all microwave model interface + PACs"; + leaf es { + type int32; + units "s"; + default "-1"; + config false; + description + "Number of errored seconds."; + } + leaf ses { + type int32; + units "s"; + default "-1"; + config false; + description + "Number of severely errored seconds."; + } + leaf cses { + type int32; + units "s"; + default "-1"; + config false; + description + "Number of consecutive severely errored seconds."; + } + leaf unavailability { + type int32; + units "s"; + default "-1"; + config false; + description + "Total time of unavailability in seconds."; + } + leaf tx-level-min { + type int8; + units "dBm"; + default "99"; + config false; + description + "Minimum transmit power. Signed integers are required."; + } + leaf tx-level-max { + type int8; + units "dBm"; + default "99"; + config false; + description + "Maximum transmit power. Signed integers are required."; + } + leaf tx-level-avg { + type int8; + units "dBm"; + default "99"; + config false; + description + "Averaged transmit power. Signed integers are required."; + } + leaf rx-level-min { + type int8; + units "dBm"; + default "99"; + config false; + description + "Minimum receive level. Signed integers are required."; + } + leaf rx-level-max { + type int8; + units "dBm"; + default "99"; + config false; + description + "Maximum receive level. Signed integers are required."; + } + leaf rx-level-avg { + type int8; + units "dBm"; + default "99"; + config false; + description + "Averaged receive level. Signed integers are required."; + } + leaf time2-states { + type int32; + units "s"; + default "-1"; + config false; + description + "Sum of all seconds the transmitter operated in e.g. BPSK."; + } + leaf time4-states-s { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time4-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time8-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time16-states-s { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time16-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time32-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time64-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time128-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time256-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time512-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time512-states-l { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time1024-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time1024-states-l { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time2048-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time2048-states-l { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time4096-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time4096-states-l { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time8192-states { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf time8192-states-l { + type int32; + units "s"; + default "-1"; + config false; + description + "none"; + } + leaf snir-min { + type int8; + units "dB"; + default "-99"; + config false; + description + "Minimum signal to (noise+interference) ratio."; + } + leaf snir-max { + type int8; + units "dB"; + default "-99"; + config false; + description + "Maximum signal to (noise+interference) ratio."; + } + leaf snir-avg { + type int8; + units "dB"; + default "-99"; + config false; + description + "Averaged signal to (noise+interference) ratio."; + } + leaf xpd-min { + type int8; + units "dB"; + default "-99"; + config false; + description + "Minimum cross polarization discrimination."; + } + leaf xpd-max { + type int8; + units "dB"; + default "-99"; + config false; + description + "Maximum cross polarization discrimination."; + } + leaf xpd-avg { + type int8; + units "dB"; + default "-99"; + config false; + description + "Averaged cross polarization discrimination."; + } + leaf rf-temp-min { + type int8; + units "C"; + default "-99"; + config false; + description + "Lowest temperature (in degree Celsius) of the radio module inside the + outdoor unit."; + } + leaf rf-temp-max { + type int8; + units "C"; + default "-99"; + config false; + description + "Highest temperature (in degree Celsius) of the radio module inside the + outdoor unit."; + } + leaf rf-temp-avg { + type int8; + units "C"; + default "-99"; + config false; + description + "Averaged temperature (in degree Celsius) of the radio module inside + the outdoor unit."; + } + leaf defect-blocks-sum { + type int16; + units "blocks"; + default "-1"; + config false; + description + "Total number of blocks that were defect after receiving and could not + be corrected by the FEC."; + } + leaf time-period { + type int32; + units "s"; + default "-1"; + config false; + description + "Total length of the measurement period."; + } + } + + grouping pmdata-ethernet { + description + "Consolidated performance information for Ethernet."; + leaf tx-ethernet-bytes-max-s { + type int32; + units "Bytes/s"; + default "-1"; + config false; + description + "Counts the number of Bytes of Ethernet traffic (before header + compression) transmitted within a second and keeps the highest value + within the measurement period. Field to be left blank for all types of + TDM containers."; + } + leaf tx-ethernet-bytes-max-m { + type int64; + units "Bytes/min"; + default "-1"; + config false; + description + "Counts the number of Bytes of Ethernet traffic (before header + compression) transmitted within a minute and keeps the highest value + with in the measurement period. Field to be left blank for all types + of TDM containers."; + } + leaf tx-ethernet-bytes-sum { + type int64; + units "Bytes"; + default "-1"; + config false; + description + "Total number of Bytes of Ethernet traffic (before header compression) + transmitted (in direction out of the device) during the measurement + period. Field to be left blank for all types of TDM containers."; + } + } + + container pmdata-entity { + description + "builder"; + uses pmdata-base; + container performance-data { + uses pmdata-microwave; + uses pmdata-ethernet; + description + "An object combining different performance monitoring data."; + } + } + + grouping pmdata15m-entity { + uses pmdata-base; + container performance-data { + uses pmdata-microwave; + uses pmdata-ethernet; + description + "An object combining different performance monitoring data."; + } + description + "An object class describing a 15 minute performance monitoring entity."; + } + + grouping pmdata24h-entity { + uses pmdata-base; + container performance-data { + uses pmdata-microwave; + uses pmdata-ethernet; + description + "An object combining different performance monitoring data."; + } + description + "An object class describing a 24 hour performance monitoring entity."; + } + + grouping inventory-entity { + description + "One equipment entity in a list of a network element that could be rack, + card, backplane, module"; + leaf id { + type string; + mandatory true; + description + "Unique database id, node-id/uuid"; + } + leaf tree-level { + type uint32; + description + "Containment level, starting with 0.."; + } + leaf parent-uuid { + type string; + description + "Unique inventory id of holder"; + } + leaf node-id { + type string; + description + "Unique node id of network element"; + } + leaf uuid { + type string; + description + "Unique inventory id of this node for this equipment, provided by + network element"; + } + leaf-list contained-holder { + type string; + description + "List of uuid of contained equipment"; + } + leaf manufacturer-name { + type string; + description + "manufactured-thing/manufacturer-properties/manufacturer-name"; + } + leaf manufacturer-identifier { + type string; + description + "manufactured-thing/manufacturer-properties/manufacturer-identifier"; + } + leaf serial { + type string; + description + "manufactured-thing/equipment-instance/serial"; + } + leaf date { + type string; + description + "manufactured-thing/equipment-instance/manufacture-date: Date + information provided by manufacturer. No specific format. ()"; + } + leaf version { + type string; + description + "manufactured-thing/equipment-type/version"; + } + leaf description { + type string; + description + "manufactured-thing/equipment-type/description"; + } + leaf part-type-id { + type string; + description + "manufactured-thing/equipment-type/part-type-identifier"; + } + leaf model-identifier { + type string; + description + "manufactured-thing/equipment-type/model-identifier"; + } + leaf type-name { + type string; + description + "manufactured-thing/equipment-type/type-name"; + } + } + + container inventory { + presence "false"; + description + "builder"; + uses inventory-entity; + } + + grouping node-details-g { + leaf-list available-capabilities { + type string; + description + "The list of available yang capabilities."; + } + leaf-list unavailable-capabilities { + type string; + description + "The list of unavailable yang capabilities."; + } + description + "An object class description the available and unavailable yang + capabilities."; + } + + grouping network-element-connection-entity { + leaf id { + type string; + description + "database id/key. here is equal to node-id"; + } + leaf node-id { + type string; + description + "mountpoint name of device in controller"; + } + leaf host { + type string; + description + "NetConf server host name or IP address of device"; + } + leaf port { + type uint32; + description + "NetConf port of device"; + } + leaf username { + type string; + description + "NetConf user name"; + } + leaf password { + type string; + description + "NetConf password. should be removed asap"; + } + leaf core-model-capability { + type string; + description + "revision of core-model capability"; + } + leaf device-type { + type NetworkElementDeviceType; + description + "categorized type of device based on implemented yang specs"; + } + leaf is-required { + type boolean; + description + "entry exists in db index required-networkelement"; + } + container node-details { + uses node-details-g; + description + "holder of available and unavailable capabilities"; + } + leaf status { + type ConnectionLogStatus; + description + "current connection status. default Disconnected"; + } + description + "An object class defining the NetConf connection towards a + NetConf server. "; + } + + container network-element-connection { + description + "builder"; + uses network-element-connection-entity; + } + + grouping status-entity { + container faults { + leaf criticals { + type uint32; + description + "The number of current faults (active alarms) with severity + 'critical'."; + } + leaf majors { + type uint32; + description + "The number of current faults (active alarms) with severity + 'major'."; + } + leaf minors { + type uint32; + description + "The number of current faults (active alarms) with severity + 'minor'."; + } + leaf warnings { + type uint32; + description + "The number of current faults (active alarms) with severity + 'warning'."; + } + description + "An object containing the number of current faults per its severity."; + } + description + "An object class defining an status entity for current faults + (also called active alarms)."; + } + + container status { + description + "builder"; + uses status-entity; + } + + grouping entity-input { + list filter { + key "property"; + leaf property { + type string; + description + "The property (parameter, column, field) identifier."; + } + leaf filtervalue { + type string; + description + "The filter information for the corresponding property."; + } + description + "List with filter criteria. Not listed means all."; + } + list sortorder { + key "property"; + leaf property { + type string; + description + "The property (parameter, column, field) identifier."; + } + leaf sortorder { + type SortOrder; + description + "The definition of the sort order for the corresponding property."; + } + description + "List with sort order. Not listed means default"; + } + container pagination { + leaf size { + type uint32 { + range "1..max"; + } + default "20"; + description + "Number of entries to be delivered"; + } + leaf page { + type uint64 { + range "1..max"; + } + default "1"; + description + "Number to be used to calculate starting entry to deliver"; + } + description + "An object defining the pagination details."; + } + description + "An object class defining a request input entity."; + } + + grouping pagination-output-g { + leaf size { + type uint32 { + range "1..max"; + } + default "20"; + description + "Number of entries to be delivered"; + } + leaf page { + type uint64 { + range "1..max"; + } + default "1"; + description + "Number to be used to calculate starting entry to deliver"; + } + leaf total { + type uint64 { + range "0..max"; + } + default "0"; + description + "Number to be used to calculate starting entry to deliver"; + } + description + "An object class defining the filter information for pagination."; + } + + container pagination-output { + description + "builder"; + uses pagination-output-g; + } + + // --- rpc + + rpc read-faultcurrent-list { + description + "Get list of current fault (active alarm) entries according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses faultcurrent-entity; + description + "The output data as list of current fault (or active alarm) + entities."; + } + } + } + + rpc read-faultlog-list { + description + "Get list of faultlog entries according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses faultlog-entity; + description + "The output data as list of fault entities."; + } + } + } + + rpc read-eventlog-list { + description + "Get list of event log entities according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses eventlog-entity; + description + "The output data as list of event log entities."; + } + } + } + + rpc read-connectionlog-list { + description + "Get list of event log entities according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses connectionlog-entity; + description + "The output data as list of connection log entities."; + } + } + } + + rpc read-maintenance-list { + description + "Get list of maintenance entries according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses maintenance-entity; + description + "The output data as list of maintenance entities."; + } + } + } + + rpc create-maintenance { + description + "insert new entry of maintenance"; + input { + uses maintenance-entity; + } + output { + uses maintenance-entity; + } + } + + rpc update-maintenance { + description + "update existing entity of maintenance"; + input { + uses maintenance-entity; + } + output { + uses maintenance-entity; + } + } + + rpc delete-maintenance { + description + "delete entity of maintenance"; + input { + uses maintenance-entity; + } + } + + rpc read-mediator-server-list { + description + "Get list of mediator-servers according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses mediator-server-entity; + description + "The list of found mediator server entities."; + } + } + } + + rpc create-mediator-server { + description + "create new entry of entity mediator-server"; + input { + uses mediator-server-entity; + } + output { + uses mediator-server-entity; + } + } + + rpc update-mediator-server { + description + "update entry of entity mediator-server"; + input { + uses mediator-server-entity; + } + output { + uses mediator-server-entity; + } + } + + rpc delete-mediator-server { + description + "delete entry of entity mediator-server"; + input { + uses mediator-server-entity; + } + } + + rpc read-network-element-connection-list { + description + "Get list of networkelement-connections according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses network-element-connection-entity; + description + "The output data as list of found network-element (or mountpoint, + or network functions) connection entities."; + } + } + } + + rpc create-network-element-connection { + description + "create entry in networkelement-connection"; + input { + uses network-element-connection-entity; + } + output { + uses network-element-connection-entity; + } + } + + rpc update-network-element-connection { + description + "Put an element to ne-entity"; + input { + uses network-element-connection-entity; + } + output { + uses network-element-connection-entity; + } + } + + rpc delete-network-element-connection { + description + "!ONLY FOR TESTING! Put an element to ne-entity"; + input { + uses network-element-connection-entity; + } + } + + rpc read-pmdata-15m-ltp-list { + description + "Get list of ltps for one mountpoint with historical pmdata"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + leaf-list data { + type string; + description + "The list of found mountpoint names."; + } + } + } + + rpc read-pmdata-24h-ltp-list { + description + "Get list of ltps for one mountpoint with historical pmdata"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + leaf-list data { + type string; + description + "The list of found logical-termination-point identifiers."; + } + } + } + + rpc read-pmdata-15m-device-list { + description + "Get list of mountpoints with historical pmdata"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + leaf-list data { + type string; + description + "The list of found mountpoint names."; + } + } + } + + rpc read-pmdata-24h-device-list { + description + "Get list of mountpoints with historical pmdata"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + leaf-list data { + type string; + description + "The list of found mountpoint names."; + } + } + } + + rpc read-pmdata-15m-list { + description + "Get list of entities according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses pmdata15m-entity; + description + "The output data as list of 15 minutes performance monitoring + entities."; + } + } + } + + rpc read-pmdata-24h-list { + description + "Get list of historical pmdata according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses pmdata24h-entity; + description + "The output data as list of 24 hours performance monitoring + entities."; + } + } + } + + rpc read-inventory-list { + description + "Get list of inventory according to filter"; + input { + uses entity-input; + } + output { + container pagination { + uses pagination-output-g; + description + "The pagination details used by the provider to filter the data."; + } + list data { + uses inventory-entity; + description + "The output data as list of inventory entities."; + } + } + } + + rpc read-status { + description + "Read status information of controller"; + output { + list data { + uses status-entity; + description + "The output data as list of status entities."; + } + } + } +} diff --git a/sdnr/wt/data-provider/model/src/main/yang/dataprovider.yang b/sdnr/wt/data-provider/model/src/main/yang/dataprovider.yang deleted file mode 100644 index 3a56661b9..000000000 --- a/sdnr/wt/data-provider/model/src/main/yang/dataprovider.yang +++ /dev/null @@ -1,1228 +0,0 @@ -module data-provider { - - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:data-provider"; - prefix "odluxprovider"; - - import ietf-yang-types { prefix "yang"; revision-date 2013-07-15; } - import netconf-node-topology { prefix "nettop"; revision-date 2015-01-14; } - description - "data-provider api module"; - - revision "2019-08-01" { - description - "Initial revision"; - } - // --- typedef - typedef Entity { - description "Data type and alias for elasticsearch or table name for SQL database."; - type enumeration { - enum connectionlog { - description "logs mountpoint connection state changes"; - } - enum faultcurrent { - description "current faults"; - } - enum eventlog { - description "logs for all notifications e.g. netconf, ves and internal events"; - } - enum faultlog { - description "faultlog information"; - } - enum historicalperformance15min { - description "performance data"; - } - enum historicalperformance24h { - description "performance data"; - } - enum mediator-server { - description "list of mediator servers"; - } - enum networkelement-connection { - description "list of mountpoints for netconf devices (joint required-network-element+mdsal - state"; - } - enum inventoryequipment { - description "list of equipment inventory"; - } - enum maintenancemode { - description "list of maintenance setting"; - } - } - } - typedef SortOrder { - type enumeration { - enum ascending { - } - enum descending { - } - } - description "Entities for odlux clients"; - } - typedef FilterProperty { - type string; - } - - typedef NotificationType { - type enumeration { - enum ProblemNotificationXml { - description ""; - } - enum AttributeValueChangedNotificationXml { - description ""; - } - } - } - - typedef ConnectionLogStatus { - type enumeration { - enum Mounted { - description "Mountpoint created"; - } - enum Unmounted { - description "Mountpoint removed"; - } - enum Connecting { - description "Mountpoint establishing connection"; - } - enum Connected { - description "Mountpoint connection established"; - } - enum UnableToConnect { - description "Mountpoint connection not possible"; - } - enum Disconnected { - description "Required and mountpoint removed"; - } - enum Undefined { - description "Status not available"; - } - } - } - typedef NetworkElementDeviceType { - type enumeration { - enum Wireless { - description "implements microwave-model.yang or air-interface.yang"; - } - enum RAN { - description "implements sth. like o-ran*.yang"; - } - enum ORAN { - description "implements RAN according to o-ran*.yang"; - } - enum RAN3GPP { - description "implements RAN according to _3gpp-ran*.yang"; - } - enum Optical { - description "implements tapi-*.yang or org-openroadm*.yang"; - } - enum Router { - description "implements vlan-interface.yang"; - } - enum NtsManager { - - description "Simulation of device"; - } - enum Nonsupported { - description "Device type known, but not support"; - } - enum Unknown { - description "Device type at this point of time unknown"; - } - } - } - typedef severity-type { - type enumeration { - enum NonAlarmed { - description "problem cleared indication"; - } - enum Warning { - description "problem level"; - } - enum Minor { - description "problem level"; - } - enum Major { - description "problem level"; - } - enum Critical { - description "problem level"; - } - } - description "According to ITU-T M.3160"; - } - typedef source-type { - type enumeration { - enum ves { - description "VES Interface"; - } - enum netconf { - description "NETCONF Interface"; - } - enum controller { - description "SDN Controller"; - } - enum unknown { - description "Unknown source"; - } - } - } - typedef granularity-period-type { - type enumeration { - enum unknown { - description "none"; - } - enum period-15-min { - description "none"; - } - enum period-24-hours { - description "none"; - } - } - description "The enumeration with the options for granularity period of the performance data similar to g.874.1-model"; - } - // --- grouping and builder-container - grouping connectionlog-entity { - leaf id { - type string; - description "database id"; - } - leaf node-id { - type string; - description "the node/mountpoint which connection state has changed"; - } - leaf timestamp { - type yang:date-and-time; - description "timestamp when event happened"; - } - leaf status { - type ConnectionLogStatus; - description "new state of the connection of the device"; - } - } - container connectionlog { - description "builder"; - uses connectionlog-entity; - } - grouping object-change-reference { - description "Reference of of object (e.g. Interface pack) owned by a node"; - leaf node-id { - type string; - } - leaf counter { - type int32; - } - leaf timestamp { - type yang:date-and-time; - } - leaf object-id { - type string; - } - } - grouping source-reference { - description "Identify a source"; - leaf source-type { - type source-type; - } - } - grouping fault { - description "Fault event of an object"; - leaf problem { - type string; - } - leaf severity { - type severity-type; - } - } - grouping attribute-change { - description "update change of an attribute"; - leaf attribute-name { - type string; - } - leaf new-value { - type string; - } - } - grouping entity-id { - description "Unique database id of entity"; - leaf id { - type string; - } - } - grouping faultcurrent-entity { - description "Current fault status"; - uses object-change-reference; - uses fault; - uses entity-id; - } - container faultcurrent { - description "builder"; - uses faultcurrent-entity; - } - grouping faultlog-entity { - description "Changed fault indication"; - uses source-reference; - uses object-change-reference; - - uses fault; - uses entity-id; - } - container faultlog { - description "builder"; - uses faultlog-entity; - } - grouping eventlog-entity { - description "One change event of devices"; - uses source-reference; - uses object-change-reference; - uses attribute-change; - uses entity-id; - } - container eventlog { - description "builder"; - uses eventlog-entity; - } - grouping filter { - leaf description { - type string; - description "Filter specific description"; - } - leaf start { - type yang:date-and-time; - description "begin of maintenance-mode"; - } - leaf end { - type yang:date-and-time; - description "end of maintenance-mode"; - } - leaf object-id-ref { - type string; - description "object id to filter on, or empty for all"; - } - leaf problem { - type string; - description "name of the problem to filter or empty for all"; - } - } - grouping maintenance-entity { - description "Maintenance mode for a device. "; - leaf id { - mandatory true; - type string; - description "Key to get/set configuration entry in database. Normally Mountpoint-name - is used as key id of node."; - } - leaf node-id { - mandatory true; - type string; - description ""; - } - leaf active { - type boolean; - description "Configuration to activate or deactivate this entry"; - } - uses filter; - } - container maintenance { - description "builder"; - uses maintenance-entity; - } - grouping mediator-server-entity { - leaf id { - mandatory true; - type string; - } - leaf url { - type string; - } - leaf name { - type string; - } - } - grouping pmdata-base { - description "Performance data base information"; - leaf node-name { - type string; - } - leaf uuid-interface { - type string; - } - leaf layer-protocol-name { - type string; - } - leaf radio-signal-id { - type string; - } - leaf time-stamp { - type yang:date-and-time; - } - leaf suspect-interval-flag { - type boolean; - } - leaf granularity-period { - type granularity-period-type; - } - leaf scanner-id { - type string; - } - } - grouping pmdata-microwave { - description "Consolidated performance information of all microwave model interface pacs"; - leaf es { - type int32; - units "s"; - default -1; - config false; - description "Number of errored seconds."; - } - leaf ses { - type int32; - units "s"; - default -1; - config false; - description "Number of severely errored seconds."; - } - leaf cses { - type int32; - units "s"; - default -1; - config false; - description "Number of consecutive severely errored seconds."; - } - leaf unavailability { - type int32; - units "s"; - default -1; - config false; - description "Total time of unavailability in seconds."; - } - leaf tx-level-min { - type int8; - units "dBm"; - default 99; - config false; - description "Minimum transmit power. Signed integers are required."; - } - leaf tx-level-max { - type int8; - units "dBm"; - default 99; - config false; - description "Maximum transmit power. Signed integers are required."; - } - leaf tx-level-avg { - type int8; - units "dBm"; - default 99; - config false; - description "Averaged transmit power. Signed integers are required."; - } - leaf rx-level-min { - type int8; - units "dBm"; - default 99; - config false; - description "Minimum receive level. Signed integers are required."; - } - leaf rx-level-max { - type int8; - units "dBm"; - default 99; - config false; - description "Maximum receive level. Signed integers are required."; - } - leaf rx-level-avg { - type int8; - units "dBm"; - default 99; - config false; - description "Averaged receive level. Signed integers are required."; - } - leaf time2-states { - type int32; - units "s"; - default -1; - config false; - description "Sum of all seconds the transmitter operated in e.g. BPSK."; - } - leaf time4-states-s { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time4-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time8-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time16-states-s { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time16-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time32-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time64-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time128-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time256-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time512-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time512-states-l { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time1024-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time1024-states-l { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time2048-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time2048-states-l { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time4096-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time4096-states-l { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time8192-states { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf time8192-states-l { - type int32; - units "s"; - default -1; - config false; - description "none"; - } - leaf snir-min { - type int8; - units "dB"; - default -99; - config false; - description "Minimum signal to (noise+interference) ratio."; - } - leaf snir-max { - type int8; - units "dB"; - default -99; - config false; - description "Maximum signal to (noise+interference) ratio."; - } - leaf snir-avg { - type int8; - units "dB"; - default -99; - config false; - description "Averaged signal to (noise+interference) ratio."; - } - leaf xpd-min { - type int8; - units "dB"; - default -99; - config false; - description "Minimum cross polarization discrimination."; - } - leaf xpd-max { - type int8; - units "dB"; - default -99; - config false; - description "Maximum cross polarization discrimination."; - } - leaf xpd-avg { - type int8; - units "dB"; - default -99; - config false; - description "Averaged cross polarization discrimination."; - } - leaf rf-temp-min { - type int8; - units "C"; - default -99; - config false; - description "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."; - } - leaf rf-temp-max { - type int8; - units "C"; - default -99; - config false; - description "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."; - } - leaf rf-temp-avg { - type int8; - units "C"; - default -99; - config false; - description "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."; - } - leaf defect-blocks-sum { - type int16; - units "blocks"; - default -1; - config false; - description "Total number of blocks that were defect after receiving and could not be corrected by the FEC."; - } - leaf time-period { - type int32; - units "s"; - default -1; - config false; - description "Total length of the measurement period."; - } - } - grouping pmdata-ethernet { - description "Consolidated performance information for ethernet."; - leaf tx-ethernet-bytes-max-s { - type int32; - units "Bytes/s"; - default -1; - config false; - description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers."; - } - leaf tx-ethernet-bytes-max-m { - type int64; - units "Bytes/min"; - default -1; - config false; - description "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers."; - } - leaf tx-ethernet-bytes-sum { - type int64; - units "Bytes"; - default -1; - config false; - description "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers."; - } - } - container pmdata-entity { - description "builder"; - uses pmdata-base; - container performance-data { - uses pmdata-microwave; - uses pmdata-ethernet; - } - } - grouping pmdata15m-entity { - uses pmdata-base; - container performance-data { - uses pmdata-microwave; - uses pmdata-ethernet; - } - } - grouping pmdata24h-entity { - uses pmdata-base; - container performance-data { - uses pmdata-microwave; - uses pmdata-ethernet; - } - } - grouping inventory-entity { - description "One equipment entity in a list of a network element that could be rack, card, backplane, module"; - - leaf id { - description "Unique database id, node-id/uuid"; - mandatory true; - type string; - } - leaf tree-level { - description "Containment level, starting with 0.."; - type uint32; - } - leaf parent-uuid { - description "Unique inventory id of holder"; - type string; - } - leaf node-id { - description "Unique node id of network element"; - type string; - } - leaf uuid { - description "Unique inventory id of this node for this equipement, provided by network element"; - type string; - } - leaf-list contained-holder { - description "List of uuid of contained equipment"; - type string; - } - leaf manufacturer-name { - description "manufactured-thing/manufacturer-properties/manufacturer-name"; - type string; - } - leaf manufacturer-identifier { - description "manufactured-thing/manufacturer-properties/manufacturer-identifier"; - type string; - } - leaf serial { - description "manufactured-thing/equipment-instance/serial"; - type string; - } - leaf date { - description "manufactured-thing/equipment-instance/manufacture-date: Date information provided by manufacturer. No specific format. ()"; - type string; - } - leaf version { - description "manufactured-thing/equipment-type/version"; - type string; - } - leaf description { - description "manufactured-thing/equipment-type/description"; - type string; - } - leaf part-type-id { - description "manufactured-thing/equipment-type/part-type-identifier"; - type string; - } - leaf model-identifier { - description "manufactured-thing/equipment-type/model-identifier"; - type string; - } - leaf type-name { - description "manufactured-thing/equipment-type/type-name"; - type string; - } - } - container inventory { - description "builder"; - uses inventory-entity; - } - grouping node-details-g { - leaf-list available-capabilities { - type string; - } - leaf-list unavailable-capabilities { - type string; - } - } - grouping network-element-connection-entity { - - leaf id { - type string; - description "database id/key. here is equal to node-id"; - } - leaf node-id { - type string; - description "mountpoint name of device in controller"; - } - leaf host { - type string; - description "netconf hostname or ip address of device"; - } - leaf port { - type uint32; - description "netconf port of device"; - } - leaf username { - type string; - description "netconf username"; - } - leaf password { - type string; - description "netconf password. should be removed asap"; - } - leaf core-model-capability { - type string; - description "revision of core-model capability"; - } - leaf device-type { - type NetworkElementDeviceType; - description "categoried type of ne based on implemented yang specs"; - } - leaf is-required { - type boolean; - description "entry exists in db index required-networkelement"; - } - container node-details { - uses node-details-g; - description "holder of available and unavailable capabilities"; - } - leaf status { - type ConnectionLogStatus; - description "current connection status. default Disconnected"; - } - } - container network-element-connection { - description "builder"; - uses network-element-connection-entity; - } - grouping status-entity { - container faults { - leaf criticals { - type uint32; - } - leaf majors { - type uint32; - } - leaf minors { - type uint32; - } - leaf warnings { - type uint32; - } - } - } - container status { - description "builder"; - uses status-entity; - } - grouping entity-input { - list filter { - key property; - leaf property { - type string; - } - leaf filtervalue { - type string; - } - description "List with filter criteria. Not listed means all."; - } - list sortorder { - key property; - leaf property { - type string; - } - leaf sortorder { - type SortOrder; - } - description "List with sort order. Not listed means default"; - } - container pagination { - leaf size { - type uint32 { - range "1..max"; - } - default 20; - description "Number of entries to be delivered"; - } - leaf page { - type uint64 { - range "1..max"; - } - default 1; - description "Number to be used to calculate starting entry to deliver"; - } - } - } - grouping pagination-output-g { - leaf size { - type uint32 { - range "1..max"; - } - default 20; - description "Number of entries to be delivered"; - } - leaf page { - type uint64 { - range "1..max"; - } - default 1; - description "Number to be used to calculate starting entry to deliver"; - } - leaf total { - type uint64 { - range "0..max"; - } - default 0; - description "Number to be used to calculate starting entry to deliver"; - } - } - container pagination-output { - description "builder"; - uses pagination-output-g; - } - // --- rpc - rpc read-faultcurrent-list { - description - "Get list of faultcurrent entries according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses faultcurrent-entity; - } - } - } - rpc read-faultlog-list { - description - "Get list of faultlog entries according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses faultlog-entity; - } - } - } - - rpc read-eventlog-list { - description - "Get list of eventlog entities according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses eventlog-entity; - } - } - } - rpc read-connectionlog-list { - description - "Get list of eventlog entities according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses connectionlog-entity; - } - } - } - rpc read-maintenance-list { - description - "Get list of maintenance entries according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses maintenance-entity; - } - } - } - rpc create-maintenance { - description - "insert new entry of maintenance"; - input { - uses maintenance-entity; - } - output { - uses maintenance-entity; - } - } - rpc update-maintenance { - description - "update existing entity of maintenance"; - input { - uses maintenance-entity; - } - output { - uses maintenance-entity; - } - } - rpc delete-maintenance { - description - "delete entity of maintenance"; - input { - uses maintenance-entity; - } - output { - } - } - - rpc read-mediator-server-list { - description - "Get list of mediator-servers according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses mediator-server-entity; - } - } - } - rpc create-mediator-server { - description - "create new entry of entity mediator-server"; - input { - uses mediator-server-entity; - } - output { - uses mediator-server-entity; - } - } - rpc update-mediator-server { - description - "update entry of entity mediator-server"; - input { - uses mediator-server-entity; - } - output { - uses mediator-server-entity; - } - } - rpc delete-mediator-server { - description - "delete entry of entity mediator-server"; - input { - uses mediator-server-entity; - } - output { - } - } - rpc read-network-element-connection-list { - description - "Get list of networkelement-connections according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses network-element-connection-entity; - } - } - } - rpc create-network-element-connection { - description "create entry in networkelement-connection"; - input { - uses network-element-connection-entity; - } - output { - uses network-element-connection-entity; - } - } - rpc update-network-element-connection { - description "Put an element to ne-entity"; - input { - uses network-element-connection-entity; - } - output { - uses network-element-connection-entity; - } - } - rpc delete-network-element-connection { - description "!ONLY FOR TESTING! Put an element to ne-entity"; - input { - uses network-element-connection-entity; - } - output { - } - } - - rpc read-pmdata-15m-ltp-list { - description - "Get list of ltps for one mountpoint with historical pmdata"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - leaf-list data { - type string; - } - } - } - rpc read-pmdata-24h-ltp-list { - description - "Get list of ltps for one mountpoint with historical pmdata"; - input { - uses entity-input; - } - - output { - container pagination { - uses pagination-output-g; - } - leaf-list data { - type string; - } - } - } - rpc read-pmdata-15m-device-list { - description - "Get list of mountpoints with historical pmdata"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - leaf-list data { - type string; - } - } - } - rpc read-pmdata-24h-device-list { - description - "Get list of mountpoints with historical pmdata"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - leaf-list data { - type string; - } - } - } - - rpc read-pmdata-15m-list { - description - "Get list of entities according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses pmdata15m-entity; - } - } - } - rpc read-pmdata-24h-list { - description - "Get list of historical pmdata according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses pmdata24h-entity; - } - } - } - rpc read-inventory-list { - description - "Get list of inventory according to filter"; - input { - uses entity-input; - } - output { - container pagination { - uses pagination-output-g; - } - list data { - uses inventory-entity; - } - } - } - rpc read-status { - description - "Read status information of controller"; - output { - list data { - uses status-entity; - } - } - } -} - diff --git a/sdnr/wt/data-provider/pom.xml b/sdnr/wt/data-provider/pom.xml index 66bbf670b..f0879f26d 100755 --- a/sdnr/wt/data-provider/pom.xml +++ b/sdnr/wt/data-provider/pom.xml @@ -41,6 +41,7 @@ <name>ccsdk-features :: ${project.artifactId}</name> <modules> + <module>setup</module> <module>model</module> <module>provider</module> <module>feature</module> diff --git a/sdnr/wt/data-provider/provider/pom.xml b/sdnr/wt/data-provider/provider/pom.xml index 2742d70ac..3f72ce1a7 100644 --- a/sdnr/wt/data-provider/provider/pom.xml +++ b/sdnr/wt/data-provider/provider/pom.xml @@ -52,7 +52,7 @@ <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format> <buildtime>${maven.build.timestamp}</buildtime> <databaseport>49402</databaseport> - <odlux.buildno>41.0f8da02(20/02/20)</odlux.buildno> + <odlux.buildno>42.0f8da02(20/02/24)</odlux.buildno> </properties> <dependencies> @@ -61,6 +61,12 @@ <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>sdnr-wt-data-provider-setup</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>sdnr-wt-common</artifactId> @@ -137,11 +143,13 @@ <goal>exec</goal> </goals> <configuration> - <executable>bash</executable> + <executable>java</executable> <arguments> - <argument>${basedir}/../../data-provider/provider/src/main/resources/es-init.sh</argument> - <argument>initfile</argument> - <argument>-f</argument> + <argument>-jar</argument> + <argument>${basedir}/../../data-provider/setup/target/sdnr-dmt.jar</argument> + <argument>-c</argument> + <argument>pluginfile</argument> + <argument>-of</argument> <argument>${project.build.directory}/EsInit.script</argument> </arguments> </configuration> diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/HtDatabaseMaintenanceService.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/HtDatabaseMaintenanceService.java index 45d989d6a..5ff7a5dec 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/HtDatabaseMaintenanceService.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/HtDatabaseMaintenanceService.java @@ -120,6 +120,7 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance { } } + } /** @@ -153,6 +154,7 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance { * @param mountPointNodeName * @return */ + @SuppressWarnings("null") private boolean isRequireNe(String mountPointNodeName) { NetworkElementConnectionEntity ne = null; if (requiredNeRW != null) { @@ -161,7 +163,11 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance { } else { LOG.warn("cannot read db. no db reader writer initialized"); } - return ne != null; + if (ne != null && ne.isIsRequired() != null) { + return ne.isIsRequired(); + } else { + return false; + } } } diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/QueryByFilter.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/QueryByFilter.java index db527959c..6b3c89af9 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/QueryByFilter.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/data/QueryByFilter.java @@ -17,6 +17,7 @@ ******************************************************************************/ package org.onap.ccsdk.features.sdnr.wt.dataprovider.data; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -40,6 +41,7 @@ import org.slf4j.LoggerFactory; public class QueryByFilter { private static final Logger LOG = LoggerFactory.getLogger(DataObjectAcessorPm.class); + private static final List<String> timestampValueNames = Arrays.asList("timestamp","start","end"); private QueryByFilter() { //Hide @@ -276,7 +278,7 @@ public class QueryByFilter { // v=v.toLowerCase(); } if (DbFilter.hasSearchParams(v)) { - if(p!=null && "timestamp".equals(p.toLowerCase())) { + if(p!=null && timestampValueNames.contains(p.toLowerCase())) { query = fromTimestampSearchFilter(p,v); if(query!=null) { return query; @@ -311,7 +313,7 @@ public class QueryByFilter { // v=v.toLowerCase(); } if(DbFilter.hasSearchParams(v)) { - if(p!=null && "timestamp".equals(p.toLowerCase())) { + if(p!=null && timestampValueNames.contains(p.toLowerCase())) { tmpQuery=fromTimestampSearchFilter(p,v); if(tmpQuery!=null) { query.must(tmpQuery); diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/EsConfig.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/EsConfig.java index a846cd8f3..ccfbe98fd 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/EsConfig.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/EsConfig.java @@ -53,7 +53,10 @@ public class EsConfig implements Configuration, IEsConfig { private static final String DEFAULT_ARCHIVE_INTERVAL_SEC = "0"; /** keep data for this time [in seconds] 30 days */ private static final String DEFAULT_ARCHIVE_LIMIT_SEC = String.valueOf(60L * 60L * 24L * 30L); - private static final String DEFAULT_KEY_NODE = "elasticsearchnode"; + //private static final String DEFAULT_KEY_NODE = "elasticsearchnode"; + private static final String DEFAULT_VALUE_NODE = "elasticsearchnode"; + private static final String DEFAULT_VALUE_DBUSERNAME = "${SDNRDBUSERNAME}"; + private static final String DEFAULT_VALUE_DBPASSWORD = "${SDNRDBPASSWORD}"; private final ConfigurationFileRepresentation configuration; @@ -138,9 +141,9 @@ public class EsConfig implements Configuration, IEsConfig { configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_CLUSTER, DEFAULT_VALUE_CLUSTER); configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_INTERVAL, DEFAULT_ARCHIVE_INTERVAL_SEC); - configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_NODE, DEFAULT_KEY_NODE); - configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_USERNAME, ""); - configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_PASSWORD, ""); + configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_NODE, DEFAULT_VALUE_NODE); + configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_USERNAME, DEFAULT_VALUE_DBUSERNAME); + configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_PASSWORD, DEFAULT_VALUE_DBPASSWORD); } @Override diff --git a/sdnr/wt/data-provider/provider/src/main/resources/es-init.sh b/sdnr/wt/data-provider/provider/src/main/resources/es-init.sh index 8873b0b75..67d495aa0 100755 --- a/sdnr/wt/data-provider/provider/src/main/resources/es-init.sh +++ b/sdnr/wt/data-provider/provider/src/main/resources/es-init.sh @@ -36,10 +36,10 @@ INITFILENAME="Init.script" set_definition() { def "connectionlog" '{"node-id": {"type": "keyword"},"timestamp": {"type": "date"},"status": {"type": "keyword"}}' - def "maintenancemode" '{"node-id": {"type": "keyword"},"active": {"type": "boolean"}},"date_detection":false}}' - def "faultlog" '{"node-id": {"type": "keyword"},"severity": {"type": "keyword"},"timestamp": {"type": "date"},"problem": {"type": "keyword"},"counter": {"type": "keyword"},"object-id":{"type": "keyword"},"source-type":{"type": "keyword"}}' - def "faultcurrent" '{"node-id": {"type": "keyword"},"severity": {"type": "keyword"},"timestamp": {"type": "date"},"problem": {"type": "keyword"},"counter": {"type": "keyword"},"object-id":{"type": "keyword"}}' - def "eventlog" '{"node-id": {"type": "keyword"},"timestamp": {"type": "date"},"new-value": {"type": "keyword"},"attribute-name": {"type": "keyword"},"counter": {"type": "keyword"},"object-id": {"type": "keyword"}}' + def "maintenancemode" '{"node-id": {"type": "keyword"},"start": {"type": "date"},"end": {"type": "date"},"description": {"type": "keyword"},"active": {"type": "boolean"}},"date_detection":false}}' + def "faultlog" '{"node-id": {"type": "keyword"},"severity": {"type": "keyword"},"timestamp": {"type": "date"},"problem": {"type": "keyword"},"counter": {"type": "long"},"object-id":{"type": "keyword"},"source-type":{"type": "keyword"}}' + def "faultcurrent" '{"node-id": {"type": "keyword"},"severity": {"type": "keyword"},"timestamp": {"type": "date"},"problem": {"type": "keyword"},"counter": {"type": "long"},"object-id":{"type": "keyword"}}' + def "eventlog" '{"node-id": {"type": "keyword"},"source-type": {"type": "keyword"},"timestamp": {"type": "date"},"new-value": {"type": "keyword"},"attribute-name": {"type": "keyword"},"counter": {"type": "long"},"object-id": {"type": "keyword"}}' def "inventoryequipment" '{"date": {"type": "keyword"},"model-identifier": {"type": "keyword"},"manufacturer-identifier": {"type": "keyword"},"type-name": {"type": "keyword"},"description": {"type": "keyword"},"uuid": {"type": "keyword"},"version": {"type": "keyword"},"parent-uuid": {"type": "keyword"},"contained-holder": {"type": "keyword"},"node-id": {"type": "keyword"},"tree-level": {"type": "long"},"part-type-id": {"type": "keyword"},"serial": {"type": "keyword"}}' def "historicalperformance24h" '{"node-name":{"type": "keyword"},"timestamp":{"type": "date"},"suspect-interval-flag":{"type":"boolean"},"scanner-id":{"type": "keyword"},"uuid-interface":{"type": "keyword"},"layer-protocol-name":{"type": "keyword"},"granularity-period":{"type": "keyword"},"radio-signal-id":{"type": "keyword"}}' def "historicalperformance15min" '{"node-name":{"type": "keyword"},"timestamp":{"type": "date"},"suspect-interval-flag":{"type":"boolean"},"scanner-id":{"type": "keyword"},"uuid-interface":{"type": "keyword"},"layer-protocol-name":{"type": "keyword"},"granularity-period":{"type": "keyword"},"radio-signal-id":{"type": "keyword"}}' diff --git a/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestCRUDforDatabase.java b/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestCRUDforDatabase.java index d898644c9..b98af452f 100644 --- a/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestCRUDforDatabase.java +++ b/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestCRUDforDatabase.java @@ -35,6 +35,7 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders; import org.onap.ccsdk.features.sdnr.wt.common.database.requests.BaseRequest; import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.ElasticSearchDataProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.CreateMaintenanceInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.CreateMaintenanceInputBuilder; @@ -52,6 +53,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.DeleteNetworkElementConnectionInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.DeleteNetworkElementConnectionInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Entity; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EntityInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultlog; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ReadConnectionlogListInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ReadConnectionlogListInputBuilder; @@ -105,6 +109,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.UpdateNetworkElementConnectionInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.UpdateNetworkElementConnectionInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.UpdateNetworkElementConnectionOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.Filter; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.FilterBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.Pagination; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.PaginationBuilder; @@ -1338,6 +1343,28 @@ public class TestCRUDforDatabase { } + @Test + public void testOutputCamelCase() { + try { + String jsonString="{\n" + + "\"timestamp\": \"2020-02-20T09:31:22.3Z\",\n" + + "\"object-id\": \"LP-MWPS-RADIO\",\n" + + "\"severity\": \"Critical\",\n" + + "\"counter\": 10,\n" + + "\"implemented-interface\": \"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultlog\",\n" + + "\"source-type\": \"Netconf\",\n" + + "\"node-id\": \"sim4\",\n" + + "\"problem\": \"signalIsLost\"\n" + + "}"; + YangToolsMapper yangtoolsMapper = new YangToolsMapper(); + FaultlogEntity log = yangtoolsMapper.readValue( jsonString, Faultlog.class ); + System.out.println(log ); + System.out.println(yangtoolsMapper.writeValueAsString(log)); + } catch (IOException e) { + fail(e.getMessage()); + } + + } private Pagination getPagination(long pageSize, int page) { return new PaginationBuilder().setPage(BigInteger.valueOf(page)).setSize(pageSize).build(); diff --git a/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestFilterConversion.java b/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestFilterConversion.java index 5ce8fcc0b..32a5773d7 100644 --- a/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestFilterConversion.java +++ b/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestFilterConversion.java @@ -60,4 +60,11 @@ public class TestFilterConversion { QueryByFilter.setSortOrder(query, sortorder); assertNotNull(QueryByFilter.getSortOrder(sortorder, PROPERTY)); } + @Test + public void testSortorder() { + String f = "{\"input\":{\"filter\":[],\"sortorder\":[{\"property\":\"source-type\",\"sortorder\":\"ascending\"}],\"pagination\":{\"size\":10,\"page\":1}}}"; + + QueryBuilder query = QueryByFilter.setSortOrder(QueryByFilter.fromFilter(null), Arrays.asList(new SortorderBuilder().setProperty("source-type").setSortorder(SortOrder.Ascending).build())); + System.out.println(query.toJSON()); + } } diff --git a/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestTimestampFilter.java b/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestTimestampFilter.java index c32149ba5..f41ee44b1 100644 --- a/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestTimestampFilter.java +++ b/sdnr/wt/data-provider/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/test/TestTimestampFilter.java @@ -32,8 +32,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.FilterBuilder; public class TestTimestampFilter { - - @Test public void testTimestampRange() { @@ -122,6 +120,23 @@ public class TestTimestampFilter { query= QueryByFilter.fromFilter(filters ); assertRange(query.getInner(), PROPERTY_TIMESTAMP, "2050-10-14T12:42:56.0Z", "2050-10-14T12:42:57.0Z"); } + + @Test + public void testExtra() { + final String PROPERTY_TIMESTAMP = "end"; + List<Filter> filters = null; + QueryBuilder query= null; + filters = Arrays.asList(new FilterBuilder().setProperty(PROPERTY_TIMESTAMP).setFiltervalue("2020-02-19T*").build()); + query= QueryByFilter.fromFilter(filters ); + assertRange(query.getInner(), PROPERTY_TIMESTAMP, "2020-02-19T00:00:00.0Z", "2020-02-20T00:00:00.0Z"); + filters = Arrays.asList(new FilterBuilder().setProperty(PROPERTY_TIMESTAMP).setFiltervalue("2020-02-19*").build()); + query= QueryByFilter.fromFilter(filters ); + assertRange(query.getInner(), PROPERTY_TIMESTAMP, "2020-02-19T00:00:00.0Z", "2020-02-20T00:00:00.0Z"); + filters = Arrays.asList(new FilterBuilder().setProperty(PROPERTY_TIMESTAMP).setFiltervalue("2020*").build()); + query= QueryByFilter.fromFilter(filters ); + assertRange(query.getInner(), PROPERTY_TIMESTAMP, "2020-01-01T00:00:00.0Z", "2021-01-01T00:00:00.0Z"); + + } private void assertRange(JSONObject rangeQuery,String property,String lower,String upper) { System.out.println("==test for "+rangeQuery.toString()); assertTrue(rangeQuery.has("range")); diff --git a/sdnr/wt/data-provider/provider/src/test/resources/log4j.properties b/sdnr/wt/data-provider/provider/src/test/resources/log4j.properties deleted file mode 100644 index 2a2f8099e..000000000 --- a/sdnr/wt/data-provider/provider/src/test/resources/log4j.properties +++ /dev/null @@ -1,33 +0,0 @@ -# -# ============LICENSE_START======================================================= -# ONAP : ccsdk features -# ================================================================================ -# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. -# ================================================================================ -# 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. -# ============LICENSE_END======================================================= -# -# - -log4j.rootLogger=INFO, out - -log4j.logger.org.apache.camel.impl.converter=WARN -log4j.logger.org.apache.camel.management=WARN -log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN -log4j.logger.org.springframework=ERROR - -# CONSOLE appender not used by default -log4j.appender.out=org.apache.log4j.ConsoleAppender -log4j.appender.out.layout=org.apache.log4j.PatternLayout -log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n - diff --git a/sdnr/wt/data-provider/provider/src/test/resources/log4j2.xml b/sdnr/wt/data-provider/provider/src/test/resources/log4j2.xml deleted file mode 100644 index 846a9fc10..000000000 --- a/sdnr/wt/data-provider/provider/src/test/resources/log4j2.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ~ ============LICENSE_START======================================================= - ~ ONAP : ccsdk features - ~ ================================================================================ - ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. - ~ ================================================================================ - ~ 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. - ~ ============LICENSE_END======================================================= - ~ - --> - -<Configuration package="log4j.test" - status="WARN"> - <Appenders> - <Console name="Console" target="SYSTEM_OUT"> - <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> - </Console> - </Appenders> - <Loggers> - <Logger name="log4j.test.Log4jTest" level="debug"> - <AppenderRef ref="Console"/> - </Logger> - <Root level="trace"> - <AppenderRef ref="Console"/> - </Root> - </Loggers> -</Configuration>
\ No newline at end of file diff --git a/sdnr/wt/data-provider/provider/src/test/resources/simplelogger.properties b/sdnr/wt/data-provider/provider/src/test/resources/simplelogger.properties index 980da34f8..9943c2fc3 100644 --- a/sdnr/wt/data-provider/provider/src/test/resources/simplelogger.properties +++ b/sdnr/wt/data-provider/provider/src/test/resources/simplelogger.properties @@ -19,9 +19,10 @@ # # -org.slf4j.simpleLogger.defaultLogLevel=debug +org.slf4j.simpleLogger.defaultLogLevel=INFO org.slf4j.simpleLogger.showDateTime=true #org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z #org.slf4j.simpleLogger.showThreadName=true org.slf4j.simpleLogger.showLogName=true -org.slf4j.simpleLogger.showShortLogName=false
\ No newline at end of file +org.slf4j.simpleLogger.showShortLogName=false +org.slf4j.simpleLogger.org.onap.ccsdk.features.sdnr.wt.dataprovider=DEBUG diff --git a/sdnr/wt/data-provider/daexim/pom.xml b/sdnr/wt/data-provider/setup/pom.xml index 37347c072..74391a86d 100644 --- a/sdnr/wt/data-provider/daexim/pom.xml +++ b/sdnr/wt/data-provider/setup/pom.xml @@ -3,7 +3,7 @@ ~ ============LICENSE_START======================================================= ~ ONAP : ccsdk features ~ ================================================================================ - ~ Copyright (C) 2018 highstreet technologies GmbH Intellectual Property. + ~ Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. ~ All rights reserved. ~ ================================================================================ ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. @@ -23,16 +23,9 @@ ~ --> -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="http://maven.apache.org/POM/4.0.0" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> - <artifactId>sdnr-wt-data-provider-daexim</artifactId> - <version>0.7.1-SNAPSHOT</version> - <name>ccsdk-features :: ${project.artifactId}</name> - <packaging>bundle</packaging> - + <parent> <groupId>org.onap.ccsdk.parent</groupId> <artifactId>binding-parent</artifactId> @@ -40,17 +33,23 @@ <relativePath/> </parent> - <properties> - <maven.javadoc.skip>true</maven.javadoc.skip> - <databaseport>49401</databaseport> - </properties> + <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <artifactId>sdnr-wt-data-provider-setup</artifactId> + <version>0.7.1-SNAPSHOT</version> + <packaging>bundle</packaging> + <name>ccsdk-features :: ${project.artifactId}</name> <licenses> <license> <name>Apache License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0</url> </license> </licenses> + + <properties> + <maven.javadoc.skip>true</maven.javadoc.skip> + <databaseport>49404</databaseport> + </properties> <dependencies> <dependency> @@ -59,15 +58,14 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.opendaylight.netconf</groupId> - <artifactId>sal-netconf-connector</artifactId> - <scope>provided</scope> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.4</version> </dependency> <dependency> - <groupId>org.osgi</groupId> - <artifactId>org.osgi.core</artifactId> - <scope>provided</scope> - </dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>sdnr-wt-common</artifactId> @@ -82,18 +80,6 @@ <build> <plugins> <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <configuration> - <excludes> - <exclude>**/gen/**</exclude> - <exclude>**/generated-sources/**</exclude> - <exclude>**/yang-gen-sal/**</exclude> - <exclude>**/pax/**</exclude> - </excludes> - </configuration> - </plugin> - <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <executions> @@ -107,7 +93,7 @@ <skip>${skipTests}</skip> <executable>bash</executable> <arguments> - <argument>${basedir}/../data-provider/provider/src/main/resources/es-init.sh</argument> + <argument>${basedir}/../provider/src/main/resources/es-init.sh</argument> <argument>initfile</argument> <argument>-f</argument> <argument>${project.build.directory}/EsInit.script</argument> @@ -123,10 +109,9 @@ <configuration> <skip>${skipTests}</skip> <clusterName>testCluster</clusterName> - <transportPort>9500</transportPort> + <transportPort>49504</transportPort> <httpPort>${databaseport}</httpPort> <version>6.5.0</version> - <pathInitScript>${project.build.directory}/EsInit.script</pathInitScript> </configuration> <executions> <execution> @@ -157,6 +142,31 @@ </systemProperties> </configuration> </plugin> + <plugin> + <artifactId>maven-assembly-plugin</artifactId> + <executions> + <execution> + <id>make-assembly</id> <!-- this is used for inheritance merges --> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + </execution> + </executions> + <configuration> + <finalName>sdnr-dmt</finalName> + <appendAssemblyId>false</appendAssemblyId> + <archive> + <manifest> + <mainClass>org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.Program</mainClass> + </manifest> + </archive> + <descriptorRefs> + <descriptorRef>jar-with-dependencies</descriptorRef> + </descriptorRefs> + </configuration> + </plugin> + </plugins> </build> </project> diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/DataMigrationProviderImpl.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/DataMigrationProviderImpl.java new file mode 100644 index 000000000..ff5406a99 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/DataMigrationProviderImpl.java @@ -0,0 +1,370 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult; +import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo; +import org.onap.ccsdk.features.sdnr.wt.common.database.data.AliasesEntry; +import org.onap.ccsdk.features.sdnr.wt.common.database.data.AliasesEntryList; +import org.onap.ccsdk.features.sdnr.wt.common.database.data.EsVersion; +import org.onap.ccsdk.features.sdnr.wt.common.database.data.IndicesEntry; +import org.onap.ccsdk.features.sdnr.wt.common.database.data.IndicesEntryList; +import org.onap.ccsdk.features.sdnr.wt.common.database.requests.CreateAliasRequest; +import org.onap.ccsdk.features.sdnr.wt.common.database.requests.CreateIndexRequest; +import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteAliasRequest; +import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteIndexRequest; +import org.onap.ccsdk.features.sdnr.wt.common.database.responses.AcknowledgedResponse; +import org.onap.ccsdk.features.sdnr.wt.common.database.responses.GetInfoResponse; +import org.onap.ccsdk.features.sdnr.wt.common.database.responses.ListAliasesResponse; +import org.onap.ccsdk.features.sdnr.wt.common.database.responses.ListIndicesResponse; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentData; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataMigrationReport; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataContainer; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.SearchHitConverter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DataMigrationProviderImpl implements DataMigrationProviderService { + + private final Logger LOG = LoggerFactory.getLogger(DataMigrationProviderImpl.class); + + private final HtDatabaseClient dbClient; + + public DataMigrationProviderImpl(HostInfo[] hosts, String username, String password, boolean trustAll) { + this.dbClient = new HtDatabaseClient(hosts, username, password, trustAll); + } + + @Override + public DataMigrationReport importData(String filename, boolean dryrun) throws Exception { + return this.importData(filename, dryrun, Release.CURRENT_RELEASE); + } + + public DataMigrationReport importData(String filename, boolean dryrun, Release forRelease) throws Exception { + DataMigrationReport report = new DataMigrationReport(); + File file = new File(filename); + if (!file.exists()) { + if (dryrun) { + report.error("file %s not found", filename); + return report; + } + throw new FileNotFoundException(filename); + } + DataContainer container = null; + try { + container = DataContainer.load(file); + } catch (Exception e) { + if (dryrun) { + report.error("problem loading file %s: %s", filename, e.getMessage()); + return report; + } + throw new Exception("problem loading file " + filename, e); + } + ReleaseInformation ri = ReleaseInformation.getInstance(forRelease); + SearchHitConverter converter; + Set<ComponentName> components = ri.getComponents(); + //for all db components of dest architecture + for (ComponentName component : components) { + //convert to ComponentData for current release with existing ComponentData of the container + converter = SearchHitConverter.Factory.getInstance(container.getRelease(), forRelease, component); + if (converter == null) { + continue; + } + ComponentData data = converter.convert(container); + if (data != null) { + String indexName = ri.getAlias(component); + String dataTypeName = ri.getDataType(component); + if (dryrun) { + report.log("write %d entries into %s/%s", data.size(), indexName, dataTypeName); + } else { + LOG.debug("write {} entries into {}/{}", data.size(), indexName, dataTypeName); + } + for (SearchHit item : data) { + if (!dryrun) { + String id = this.dbClient.doWriteRaw(indexName, dataTypeName, item.getId(), + item.getSourceAsString()); + if (!item.getId().equals(id)) { + LOG.warn("entry for {} with original id {} was written with another id {}", + component.getValue(), item.getId(), id); + } + } + } + } else { + if (dryrun) { + report.error("unable to convert data for " + component.getValue() + " from version " + + container.getRelease().getValue() + " to " + forRelease.getValue() + "\n"); + } else { + LOG.warn("unable to convert data for {} from version {} to {}", component.getValue(), + container.getRelease().getValue(), forRelease.getValue()); + } + } + } + LOG.info("import of {} completed", filename); + if (dryrun) { + report.log("import of %s completed", filename); + } + report.setCompleted(true); + return report; + } + + + /** + * export data + * if file exists .1 (.n) will be created + * + */ + @Override + public DataMigrationReport exportData(String filename) { + DataMigrationReport report = new DataMigrationReport(); + + DataContainer container = new DataContainer(); + + filename = this.checkFilenameForWrite(filename); + LOG.info("output will be written to {}", filename); + //autodetect version + Release dbRelease = this.autoDetectRelease(); + if(dbRelease==null) { + report.error("unbable to detect db release. is database initialized?"); + return report; + } + ReleaseInformation ri = ReleaseInformation.getInstance(dbRelease); + boolean componentsSucceeded = true; + for(ComponentName c: ri.getComponents()) { + ComponentData data = new ComponentData(c); + SearchResult<SearchHit> result = this.dbClient.doReadAllJsonData(ri.getAlias(c),ri.getDataType(c),false); + data.addAll(result.getHits()); + container.addComponent(c, data ); + } + try { + Files.write(new File(filename).toPath(), Arrays.asList(container.toJSON()), StandardCharsets.UTF_8); + report.setCompleted(componentsSucceeded); + } catch (IOException e) { + LOG.warn("problem writing data to {}: {}", filename, e); + } + return report; + } + + private String checkFilenameForWrite(String filename) { + File f = new File(filename); + if (!f.exists()) { + return filename; + } + return this.checkFilenameForWrite(filename, 0); + } + + private String checkFilenameForWrite(String filename, int apdx) { + File f = new File(String.format("$s.$d",filename,apdx)); + if (!f.exists()) { + return filename; + } + return this.checkFilenameForWrite(filename, apdx + 1); + } + + @Override + public Release getCurrentVersion() { + return Release.CURRENT_RELEASE; + } + + + public Release autoDetectRelease() { + EsVersion dbVersion = this.readActualVersion(); + AliasesEntryList aliases = this.readAliases(); + IndicesEntryList indices = this.readIndices(); + if(indices==null) { + return null; + } + List<Release> foundReleases = new ArrayList<Release>(); + //if there are active aliases reduce indices to the active ones + if(aliases!=null && aliases.size()>0) { + indices = indices.subList(aliases.getLinkedIndices()); + } + for(Release r:Release.values()) { + if(r.isDbInRange(dbVersion)) { + ReleaseInformation ri = ReleaseInformation.getInstance(r); + if(ri!=null && ri.containsIndices(indices)) { + foundReleases.add(r); + } + } + } + if (foundReleases.size() == 1) { + return foundReleases.get(0); + } + LOG.error("detect {} releases: {}. unable to detect for which one to do sth.",foundReleases.size(), foundReleases); + return null; + } + private EsVersion readActualVersion() { + try { + GetInfoResponse response = this.dbClient.getInfo(); + return response.getVersion(); + } catch (Exception e) { + LOG.warn(e.getMessage()); + } + return null; + } + + private AliasesEntryList readAliases() { + AliasesEntryList entries = null; + try { + ListAliasesResponse response = this.dbClient.getAliases(); + entries = response.getEntries(); + } catch (ParseException | IOException e) { + LOG.error(e.getMessage()); + } + return entries; + } + + private IndicesEntryList readIndices() { + IndicesEntryList entries = null; + try { + ListIndicesResponse response = this.dbClient.getIndices(); + entries = response.getEntries(); + } catch (ParseException | IOException e) { + LOG.error(e.getMessage()); + } + return entries; + } + + @Override + public boolean initDatabase(Release release, int numShards, int numReplicas, String dbPrefix, + boolean forceRecreate) { + EsVersion dbVersion = this.readActualVersion(); + if (dbVersion == null) { + return false; + } + if (!release.isDbInRange(dbVersion)) { + LOG.warn("db version {} maybe not compatible with release {}", dbVersion, release); + return false; + } + if (forceRecreate) { + this.clearDatabase(release, dbPrefix); + } + ReleaseInformation ri = ReleaseInformation.getInstance(release); + AliasesEntryList aliases = this.readAliases(); + IndicesEntryList indices = this.readIndices(); + if (aliases == null || indices == null) { + return false; + } + AcknowledgedResponse response = null; + for (ComponentName component : ri.getComponents()) { + try { + if (ri.hasOwnDbIndex(component)) { + //check if index already exists + String indexName = ri.getIndex(component, dbPrefix); + String aliasName = ri.getAlias(component, dbPrefix); + if (indices.findByIndex(indexName) == null) { + LOG.info("creating index for {}", component); + CreateIndexRequest request = new CreateIndexRequest(ri.getIndex(component, dbPrefix)); + request.mappings(new JSONObject(ri.getDatabaseMapping(component))); + request.settings(new JSONObject(ri.getDatabaseSettings(component, numShards, numReplicas))); + response = this.dbClient.createIndex(request); + LOG.info(response.isAcknowledged() ? "succeeded" : "failed"); + } else { + LOG.info("index {} for {} already exists", indexName, component); + } + //check if alias already exists + if (aliases.findByAlias(aliasName) == null) { + LOG.info("creating alias for {}", component); + response = this.dbClient.createAlias(new CreateAliasRequest(indexName, aliasName)); + LOG.info(response.isAcknowledged() ? "succeeded" : "failed"); + } else { + LOG.info("alias {} for index {} for {} already exists", aliasName, indexName, component); + } + } + } catch (IOException e) { + LOG.error(e.getMessage()); + return false; + } + } + return true; + } + + @Override + public boolean clearDatabase(Release release, String dbPrefix) { + + //check aliases + AliasesEntryList entries = this.readAliases(); + if (entries == null) { + return false; + } + ReleaseInformation ri = ReleaseInformation.getInstance(release); + AcknowledgedResponse response; + if (entries.size() <= 0) { + LOG.info("no aliases to clear"); + } else { + for (ComponentName component : ri.getComponents()) { + String aliasToDelete = ri.getAlias(component, dbPrefix); + AliasesEntry entryToDelete = entries.findByAlias(aliasToDelete); + if (entryToDelete != null) { + try { + LOG.info("deleting alias {} for index {}", entryToDelete.getAlias(), entryToDelete.getIndex()); + response=this.dbClient.deleteAlias( + new DeleteAliasRequest(entryToDelete.getIndex(), entryToDelete.getAlias())); + LOG.info(response.isResponseSucceeded()?"succeeded":"failed"); + } catch (IOException e) { + LOG.error(e.getMessage()); + return false; + } + } + } + } + IndicesEntryList entries2 = this.readIndices(); + if (entries2 == null) { + return false; + } + if (entries2.size() <= 0) { + LOG.info("no indices to clear"); + } else { + for (ComponentName component : ri.getComponents()) { + String indexToDelete = ri.getIndex(component, dbPrefix); + IndicesEntry entryToDelete = entries2.findByIndex(indexToDelete); + if (entryToDelete != null) { + try { + LOG.info("deleting index {}", entryToDelete.getName()); + response=this.dbClient.deleteIndex(new DeleteIndexRequest(entryToDelete.getName())); + LOG.info(response.isResponseSucceeded()?"succeeded":"failed"); + } catch (IOException e) { + LOG.error(e.getMessage()); + return false; + } + } + } + } + + return true; + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/DataMigrationProviderService.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/DataMigrationProviderService.java new file mode 100644 index 000000000..d908d6931 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/DataMigrationProviderService.java @@ -0,0 +1,70 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import java.io.FileNotFoundException; + +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataMigrationReport; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; + + +public interface DataMigrationProviderService { + + /** + * import data from file and write these to database + * @param filename source + * @param dryrun only loading file and check consistency, not pushing into database + * @return report + * @throws FileNotFoundException + * @throws Exception + */ + DataMigrationReport importData(String filename,boolean dryrun) throws FileNotFoundException, Exception; + /** + * export current data to file + * @param filename + */ + DataMigrationReport exportData(String filename); + + /** + * + * @return + */ + Release getCurrentVersion(); + + /** + * @param release + * @param numShards + * @param numReplicas + * @param dbPrefix + * @param forceRecreate + * @return + */ + boolean initDatabase(Release release, int numShards, int numReplicas, String dbPrefix, boolean forceRecreate); + + /** + * clean up the database + * all data will be removed + * complete structure will be destroyed + * @return + */ + boolean clearDatabase(Release release, String dbPrefix); +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/Program.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/Program.java new file mode 100644 index 000000000..abb372920 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/Program.java @@ -0,0 +1,357 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import java.util.Arrays; +import java.util.List; + +import org.apache.commons.cli.*; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; +import org.apache.log4j.RollingFileAppender; +import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataMigrationReport; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.MavenDatabasePluginInitFile; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; + +/** + * @author Michael Dürre + * + */ +public class Program { + + private static final String CMD_INITDB = "init"; + private static final String CMD_CLEAR_DB = "delete"; + private static final String CMD_CREATE_PLUGIN_INIT_FILE = "pluginfile"; + private static final String CMD_IMPORT = "import"; + private static final String CMD_EXPORT = "export"; + private static final String CMD_LIST_VERSION = "list"; + private static final String CMD_INITDB_DESCRIPTION = "initialize databse indices and aliases"; + private static final String CMD_CLEAR_DB_DESCRIPTION = "clear database indices and aliases"; + private static final String CMD_CREATE_PLUGIN_INIT_FILE_DESCRIPTION = "create maven plugin file"; + private static final String CMD_IMPORT_DESCRIPTION = "import data into database"; + private static final String CMD_EXPORT_DESCRIPTION = "export data from database"; + private static final String CMD_LIST_VERSION_DESCRIPTION = "list release versions"; + + private static final List<String[]> commands = Arrays.asList(new String[] { CMD_INITDB, CMD_INITDB_DESCRIPTION }, + new String[] { CMD_CLEAR_DB, CMD_CLEAR_DB_DESCRIPTION }, + new String[] { CMD_CREATE_PLUGIN_INIT_FILE, CMD_CREATE_PLUGIN_INIT_FILE_DESCRIPTION }, + new String[] { CMD_IMPORT, CMD_IMPORT_DESCRIPTION }, new String[] { CMD_EXPORT, CMD_EXPORT_DESCRIPTION }, + new String[] { CMD_LIST_VERSION, CMD_LIST_VERSION_DESCRIPTION }); + private static final String APPLICATION_NAME = "SDNR DataMigrationTool"; + private static final int DEFAULT_SHARDS = 5; + private static final int DEFAULT_REPLICAS = 1; + private static final String DEFAULT_DBURL = "http://sdnrdb:9200"; + private static final String DEFAULT_DBPREFIX = ""; + private static final String OPTION_FORCE_RECREATE_SHORT = "f"; + private static final String OPTION_SILENT_SHORT = "n"; + private static final String OPTION_SILENT = "silent"; + private static final String OPTION_VERSION_SHORT = "v"; + private static final String OPTION_SHARDS_SHORT = "s"; + private static final String OPTION_REPLICAS_SHORT = "r"; + private static final String OPTION_OUTPUTFILE_SHORT = "of"; + private static final String OPTION_INPUTFILE_SHORT = "if"; + private static final String OPTION_DEBUG_SHORT = "x"; + private static final String OPTION_TRUSTINSECURESSL_SHORT = "k"; + + private static Options options = init(); + + private static Log LOG = null; + + @SuppressWarnings("unchecked") + private static <T> T getOptionOrDefault(CommandLine cmd, String option, T def) throws ParseException { + if (def instanceof Boolean) { + return cmd.hasOption(option) ? (T) Boolean.TRUE : def; + } + if (cmd.hasOption(option) && cmd.getOptionValue(option) != null) { + if (option.equals(OPTION_VERSION_SHORT)) { + String v = cmd.getOptionValue(option); + return (T) Release.getValueBySuffix(v.startsWith("-") ? v : ("-" + v)); + } else { + return (T) cmd.getParsedOptionValue(option); + } + } + return def; + } + + private static void initLog(boolean silent, String logfile) { + initLog(silent, logfile, Level.INFO); + } + + private static void initLog(boolean silent, String logfile, Level loglvl) { + Logger.getRootLogger().getLoggerRepository().resetConfiguration(); + LOG = LogFactory.getLog(Program.class); + if (!silent) { + ConsoleAppender console = new ConsoleAppender(); // create appender + // configure the appender + String PATTERN = "%d [%p|%C{1}] %m%n"; + console.setLayout(new PatternLayout(PATTERN)); + console.setThreshold(loglvl); + console.activateOptions(); + // add appender to any Logger (here is root) + Logger.getRootLogger().addAppender(console); + } + if (logfile != null) { + RollingFileAppender fa = new RollingFileAppender(); + fa.setName("FileLogger"); + fa.setFile(logfile); + fa.setLayout(new PatternLayout("%d %-5p [%c] %m%n")); + fa.setThreshold(loglvl); + fa.setMaximumFileSize(10000000); + fa.setAppend(true); + fa.setMaxBackupIndex(5); + fa.activateOptions(); + // add appender to any Logger (here is root) + Logger.getRootLogger().addAppender(fa); + } + // repeat with all other desired appenders + } + + public static void main(String[] args) { + CommandLineParser parser = new DefaultParser(); + HelpFormatter formatter = new HelpFormatter(); + CommandLine cmd = null; + try { + cmd = parser.parse(options, args); + } catch (ParseException e) { + System.out.println(e.getMessage()); + printHelp(formatter); + System.exit(1); + } + if (cmd == null) { + printHelp(formatter); + System.exit(1); + } + try { + initLog(getOptionOrDefault(cmd, OPTION_SILENT_SHORT, false), null,getOptionOrDefault(cmd, OPTION_DEBUG_SHORT, false)?Level.DEBUG:Level.INFO); + } catch (ParseException e2) { + + } + switch (cmd.getOptionValue("c")) { + case CMD_INITDB: + try { + cmd_init_db(cmd); + } catch (Exception e1) { + exit(e1); + } + break; + case CMD_CLEAR_DB: + try { + cmd_clear_db(cmd); + } catch (Exception e1) { + exit(e1); + } + break; + case CMD_CREATE_PLUGIN_INIT_FILE: + try { + String of = getOptionOrDefault(cmd, "of", null); + if (of == null) { + throw new Exception("please add the parameter output-file"); + } + MavenDatabasePluginInitFile.create(Release.CURRENT_RELEASE, of); + } catch (Exception e) { + exit(e); + } + break; + case CMD_IMPORT: + try { + cmd_dbimport(cmd); + } catch (Exception e1) { + exit(e1); + } + break; + case CMD_EXPORT: + try { + cmd_dbexport(cmd); + } catch (Exception e) { + exit(e); + } + break; + case CMD_LIST_VERSION: + cmd_listversion(); + break; + default: + printHelp(formatter); + break; + } + System.exit(0); + } + + /** + * @param formatter + */ + private static void printHelp(HelpFormatter formatter) { + formatter.printHelp(APPLICATION_NAME, options); + System.out.println("\nCommands:"); + for (String[] c : commands) { + System.out.println(String.format("%10s\t%s", c[0], c[1])); + } + } + + /** + * + */ + private static void cmd_listversion() { + + System.out.println("Database Releases:"); + final String format = "%15s\t%8s"; + System.out.println(String.format(format, "Name", "Version")); + for (Release r : Release.values()) { + + System.out.println(String.format(format, r.getValue(), + r.getDBSuffix() != null && r.getDBSuffix().length() > 1 ? r.getDBSuffix().substring(1) : "")); + } + + } + + /** + * @throws Exception + * + */ + private static void cmd_dbimport(CommandLine cmd) throws Exception { + String dbUrl = getOptionOrDefault(cmd, "db", DEFAULT_DBURL); + String username = getOptionOrDefault(cmd, "dbu", null); + String password = getOptionOrDefault(cmd, "dbp", null); + String filename = getOptionOrDefault(cmd, OPTION_OUTPUTFILE_SHORT, null); + boolean trustAll = getOptionOrDefault(cmd, OPTION_TRUSTINSECURESSL_SHORT, false); + if (filename == null) { + throw new Exception("please add output file parameter"); + } + DataMigrationProviderImpl service = new DataMigrationProviderImpl(new HostInfo[] { HostInfo.parse(dbUrl) }, + username, password,trustAll); + DataMigrationReport report = service.importData(filename,false); + LOG.info(report); + } + + /** + * @throws Exception + * + */ + private static void cmd_dbexport(CommandLine cmd) throws Exception { + String dbUrl = getOptionOrDefault(cmd, "db", DEFAULT_DBURL); + String username = getOptionOrDefault(cmd, "dbu", null); + String password = getOptionOrDefault(cmd, "dbp", null); + String filename = getOptionOrDefault(cmd, OPTION_OUTPUTFILE_SHORT, null); + boolean trustAll = getOptionOrDefault(cmd, OPTION_TRUSTINSECURESSL_SHORT, false); + if (filename == null) { + throw new Exception("please add output file parameter"); + } + DataMigrationProviderImpl service = new DataMigrationProviderImpl(new HostInfo[] { HostInfo.parse(dbUrl) }, + username, password,trustAll); + DataMigrationReport report = service.exportData(filename); + LOG.info(report); + } + + /** + * @param e + */ + private static void exit(Exception e) { + if (LOG != null) { + LOG.error("Error during execution: {}", e); + } else { + System.err.println(e); + } + System.exit(1); + } + + /** + * @param cmd + * @throws ParseException + * @throws java.text.ParseException + */ + private static void cmd_clear_db(CommandLine cmd) throws ParseException, java.text.ParseException { + Release r = getOptionOrDefault(cmd, OPTION_VERSION_SHORT, Release.CURRENT_RELEASE); + String dbUrl = getOptionOrDefault(cmd, "db", DEFAULT_DBURL); + String dbPrefix = getOptionOrDefault(cmd, "p", DEFAULT_DBPREFIX); + String username = getOptionOrDefault(cmd, "dbu", null); + String password = getOptionOrDefault(cmd, "dbp", null); + boolean trustAll = getOptionOrDefault(cmd, OPTION_TRUSTINSECURESSL_SHORT, false); + DataMigrationProviderImpl service = new DataMigrationProviderImpl(new HostInfo[] { HostInfo.parse(dbUrl) }, + username, password,trustAll); + service.clearDatabase(r, dbPrefix); + } + + /** + * @param cmd + * @throws ParseException + * @throws java.text.ParseException + */ + private static void cmd_init_db(CommandLine cmd) throws ParseException, java.text.ParseException { + Release r = getOptionOrDefault(cmd, OPTION_VERSION_SHORT, Release.CURRENT_RELEASE); + int numShards = getOptionOrDefault(cmd, OPTION_SHARDS_SHORT, DEFAULT_SHARDS); + int numReplicas = getOptionOrDefault(cmd, OPTION_REPLICAS_SHORT, DEFAULT_REPLICAS); + String dbUrl = getOptionOrDefault(cmd, "db", DEFAULT_DBURL); + String dbPrefix = getOptionOrDefault(cmd, "p", DEFAULT_DBPREFIX); + String username = getOptionOrDefault(cmd, "dbu", null); + String password = getOptionOrDefault(cmd, "dbp", null); + boolean trustAll = getOptionOrDefault(cmd, OPTION_TRUSTINSECURESSL_SHORT, false); + DataMigrationProviderImpl service = new DataMigrationProviderImpl(new HostInfo[] { HostInfo.parse(dbUrl) }, + username, password,trustAll); + boolean forceRecreate = cmd.hasOption(OPTION_FORCE_RECREATE_SHORT); + service.initDatabase(r, numShards, numReplicas, dbPrefix, forceRecreate); + + } + + /** + * @return + */ + private static Options init() { + Options options = new Options(); + options.addOption(createOption("c", "cmd", true, "command to execute", true)); + options.addOption(createOption("db", "dburl", true, "database url", false)); + options.addOption(createOption("dbu", "db-username", true, "database basic auth username", false)); + options.addOption(createOption("dbp", "db-password", true, "database basic auth password", false)); + options.addOption(createOption(OPTION_REPLICAS_SHORT, "replicas", true, "amount of replicas", false)); + options.addOption(createOption(OPTION_SHARDS_SHORT, "shards", true, "amount of shards", false)); + options.addOption(createOption("p", "prefix", true, "prefix for db indices", false)); + options.addOption(createOption(OPTION_VERSION_SHORT, "version", true, "version", false)); + options.addOption(createOption(OPTION_DEBUG_SHORT, "verbose", false, "verbose mode", false)); + options.addOption(createOption(OPTION_TRUSTINSECURESSL_SHORT, "trust-insecure", false, "trust insecure ssl certs", false)); + options.addOption(createOption("w", "wait", true, "wait delay for yellow status", false)); + options.addOption( + createOption(OPTION_FORCE_RECREATE_SHORT, "force-recreate", false, "delete if sth exists", false)); + options.addOption(createOption(OPTION_SILENT_SHORT, OPTION_SILENT, false, "prevent console output", false)); + options.addOption(createOption(OPTION_OUTPUTFILE_SHORT, "output-file", true, "file to write into", false)); + options.addOption(createOption(OPTION_INPUTFILE_SHORT, "input-file", true, "file to read from", false)); + + return options; + } + + /** + * @param opt + * @param longOpt + * @param hasArg + * @param description + * @param required + * @return + */ + private static Option createOption(String opt, String longOpt, boolean hasArg, String description, + boolean required) { + Option o = new Option(opt, longOpt, hasArg, description); + o.setRequired(required); + return o; + } +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/ReleaseInformation.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/ReleaseInformation.java new file mode 100644 index 000000000..5c5aa2a8b --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/ReleaseInformation.java @@ -0,0 +1,157 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import java.util.Map; +import java.util.Set; + +import org.onap.ccsdk.features.sdnr.wt.common.database.data.IndicesEntryList; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DatabaseInfo; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.KeepDataSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.SearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto.ElAltoReleaseInformation; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.frankfurt.FrankfurtReleaseInformation; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.guilin.GuilinReleaseInformation; + +public abstract class ReleaseInformation { + + private final Release release; + private final Map<ComponentName, DatabaseInfo> dbMap; + + public ReleaseInformation(Release r, Map<ComponentName, DatabaseInfo> dbMap) { + this.release = r; + this.dbMap = dbMap; + } + + /** + * get database alias for component + * @param name + * @return alias or null if not exists + */ + public String getAlias(ComponentName name) { + return this.getAlias(name,""); + } + public String getAlias(ComponentName name,String prefix) { + return dbMap.get(name) == null ? null : prefix+dbMap.get(name).alias; + } + + /** + * @param c + * @return + */ + public String getIndex(ComponentName name) { + return this.getIndex(name,""); + } + public String getIndex(ComponentName name,String prefix) { + return dbMap.get(name) == null ? null : (prefix+dbMap.get(name).getIndex(this.release.getDBSuffix())); + } + + /** + * get database datatype (doctype) for component + * @param name + * @return datatype or null if not exists + */ + public String getDataType(ComponentName name) { + return dbMap.get(name) == null ? null : dbMap.get(name).doctype; + } + + /** + * get database doctype definition for component + * @param name + * @return mappings or null if not exists + */ + public String getDatabaseMapping(ComponentName name) { + return dbMap.get(name) == null ? null : dbMap.get(name).getMapping(); + } + /** + * get database settings definition for component + * @param name + * @return settings or null if not exists + */ + public String getDatabaseSettings(ComponentName name,int shards,int replicas) { + return dbMap.get(name) == null ? null : dbMap.get(name).getSettings(shards, replicas); + } + + /** + * get converter for component data + * @param dst destination release + * @param comp component to convert + * @return + */ + public SearchHitConverter getConverter(Release dst, ComponentName comp) { + if(dst==this.release && this.getComponents().contains(comp)) { + return new KeepDataSearchHitConverter(comp); + } + return null; + } + + public static ReleaseInformation getInstance(Release r) { + switch (r) { + case EL_ALTO: + return new ElAltoReleaseInformation(); + case FRANKFURT_R1: + return new FrankfurtReleaseInformation(); + case GUILIN: + return new GuilinReleaseInformation(); + default: + return null; + } + } + + /** + * @return + */ + public Set<ComponentName> getComponents() { + return dbMap.keySet(); + } + + /** + * @param component + * @return + */ + public boolean hasOwnDbIndex(ComponentName component) { + return this.getDatabaseMapping(component)!=null; + } + + /** + * @param indices + * @return true if components of this release are covered by the given indices + */ + protected boolean containsIndices(IndicesEntryList indices) { + + if(this.dbMap.size()<=0) { + return false; + } + for(DatabaseInfo entry:this.dbMap.values()) { + String dbIndexName = entry.getIndex(this.release.getDBSuffix()); + if(indices.findByIndex(dbIndexName)==null) { + return false; + } + } + return true; + + } + + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/BaseSearchHitConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/BaseSearchHitConverter.java new file mode 100644 index 000000000..2f4f067bd --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/BaseSearchHitConverter.java @@ -0,0 +1,51 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; + +public abstract class BaseSearchHitConverter implements SearchHitConverter { + + private ComponentName name; + public BaseSearchHitConverter(ComponentName name) { + this.name = name; + } + + protected SearchHit getSearchHit(String index, String type, String id, JSONObject data) { + JSONObject o = new JSONObject(); + o.put("_index", index); + o.put("_type", type); + o.put("_id", id); + o.put("_source", data); + return new SearchHit(o); + } + @Override + public ComponentData convert(DataContainer container) { + ComponentData srcData = container.getComponents().get(this.name); + ComponentData dstData = new ComponentData(srcData.getName()); + for(SearchHit sh:srcData) { + dstData.add(this.convert(sh)); + } + return dstData; + } +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ComponentData.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ComponentData.java new file mode 100644 index 000000000..fd361843c --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ComponentData.java @@ -0,0 +1,62 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import java.util.ArrayList; +import org.json.JSONArray; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; + +public class ComponentData extends ArrayList<SearchHit>{ + + /** + * + */ + private static final long serialVersionUID = 1L; + private final ComponentName name; + + public ComponentData(ComponentName name) { + this(name,null); + } + + public ComponentData(ComponentName name,JSONArray a) { + this.name = name; + if(a!=null) { + for(int i=0;i<a.length();i++) { + this.add(new SearchHit(a.getJSONObject(i))); + } + } + + } + + public ComponentName getName() { + return this.name; + } + + public JSONArray toJsonArray() { + JSONArray a = new JSONArray(); + for(SearchHit h:this) { + a.put(h.getRaw()); + } + return a; + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ComponentName.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ComponentName.java new file mode 100644 index 000000000..9c5ef5c53 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ComponentName.java @@ -0,0 +1,59 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +public enum ComponentName { + + CONNECTIONLOG("connectionlog"), + EVENTLOG("eventlog"), + FAULTLOG("faultlog"), + FAULTCURRENT("faultcurrent"), + HISTORICAL_PERFORMANCE_15M("historicalperformance15m"), + HISTORICAL_PERFORMANCE_24H("historicalperformance24h"), + INVENTORY("inventory"), + INVENTORYTOPLEVEL("inventorytoplevel"), + MAINTENANCE("maintenance"), + MEDIATOR_SERVER("mediator-server"), + REQUIRED_NETWORKELEMENT("required-networkelement"); + + private final String value; + + private ComponentName(String s) { + this.value = s; + } + @Override + public String toString() { + return this.value; + } + public String getValue() { + return value; + } + public static ComponentName getValueOf(String s) throws Exception { + s = s.toLowerCase(); + for(ComponentName p:ComponentName.values()) { + if(p.value.equals(s)) { + return p; + } + } + throw new Exception("value not found for "+s); + } +}
\ No newline at end of file diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ConfigData.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ConfigData.java new file mode 100644 index 000000000..95c483736 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ConfigData.java @@ -0,0 +1,35 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +public class ConfigData { + + private final String[] lines; + + public String[] getLines() { + return this.lines; + } + public ConfigData(String content) { + this.lines = content.split("\n"); + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ConfigName.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ConfigName.java new file mode 100644 index 000000000..181fe2006 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/ConfigName.java @@ -0,0 +1,52 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +public enum ConfigName { + + APIGATEWAY("apigateway"), + DEVICEMANAGER("devicemanager"), + DATAPROVIDER("dataprovider"); + + + private final String value; + + private ConfigName(String s) { + this.value = s; + } + @Override + public String toString() { + return this.value; + } + public String getValue() { + return value; + } + public static ConfigName getValueOf(String s) throws Exception { + s = s.toLowerCase(); + for(ConfigName p:ConfigName.values()) { + if(p.value.equals(s)) { + return p; + } + } + throw new Exception("value not found"); + } +}
\ No newline at end of file diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DataContainer.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DataContainer.java new file mode 100644 index 000000000..f50969ed6 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DataContainer.java @@ -0,0 +1,141 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import java.io.File; +import java.io.FileNotFoundException; +import java.nio.file.Files; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl; + +/** + * + * @author Michael Dürre + * + */ +public class DataContainer { + + private final Release release; + private final Date created; + private final Map<ComponentName, ComponentData> components; + private final Map<ConfigName, ConfigData> configs; + + public Release getRelease() { + return this.release; + } + + public boolean isCurrentRelease() { + return this.release.equals(Release.CURRENT_RELEASE); + } + + public Date getCreated() { + return this.created; + } + + public Map<ComponentName, ComponentData> getComponents() { + return this.components; + } + + public Map<ConfigName, ConfigData> getConfigs() { + return this.configs; + } + + public DataContainer() { + this(Release.CURRENT_RELEASE); + } + + public DataContainer(Release release) { + this(release, new Date()); + } + + public DataContainer(Release release, Date dt) { + this.release = release; + this.created = dt; + this.components = new HashMap<>(); + this.configs = new HashMap<>(); + } + + public void addComponent(ComponentName name, ComponentData data) { + this.components.put(name, data); + } + + public void addConfig(ConfigName name, ConfigData data) { + this.configs.put(name, data); + } + + public static DataContainer load(File file) throws Exception { + if(!file.exists()) { + throw new FileNotFoundException(); + } + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'"); + JSONObject o = new JSONObject(new String(Files.readAllBytes(file.toPath()))); + DataContainer c = new DataContainer(Release.getValueOf(o.getString("release")), + format.parse(o.getString("created"))); + JSONObject comps = o.getJSONObject("components"); + + String k; + ComponentName compKey; + JSONArray compData; + for (Object key : comps.keySet()) { + k = String.valueOf(key); + // check component if exists + compKey = ComponentName.getValueOf(k); + compData = comps.getJSONArray(k); + c.addComponent(compKey, new ComponentData(compKey, compData)); + } + ConfigName confKey; + ConfigData confData; + JSONObject confs = o.getJSONObject("configs"); + for (Object key : confs.keySet()) { + k = String.valueOf(key); + confKey = ConfigName.getValueOf(k); + confData = new ConfigData(confs.getString(k)); + c.addConfig(confKey, confData); + } + return c; + } + + public String toJSON() { + JSONObject o = new JSONObject(); + o.put("release", this.release.getValue()); + o.put("created", NetconfTimeStampImpl.getConverter().getTimeStampAsNetconfString(this.created)); + JSONObject compsJson = new JSONObject(); + JSONObject confsJson = new JSONObject(); + for (Entry<ComponentName, ComponentData> entry : this.components.entrySet()) { + compsJson.put(entry.getKey().getValue(), entry.getValue().toJsonArray()); + } + for (Entry<ConfigName, ConfigData> entry : this.configs.entrySet()) { + confsJson.put(entry.getKey().getValue(), entry.getValue().toString()); + } + o.put("components", compsJson); + o.put("configs", confsJson); + return o.toString(); + } + +}
\ No newline at end of file diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DataMigrationReport.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DataMigrationReport.java new file mode 100644 index 000000000..c8270bad6 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DataMigrationReport.java @@ -0,0 +1,54 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import java.util.ArrayList; +import java.util.List; + +public class DataMigrationReport { + + private boolean completed; + private final List<String> logs; + private final List<String> errors; + public void setCompleted(boolean s) { + this.completed = s; + } + public boolean completed() { + return this.completed; + } + public void log(String format,Object ...params) { + this.logs.add(String.format(format, params)); + } + public void error(String format,Object ...params) { + this.errors.add(String.format(format, params)); + } + public DataMigrationReport() { + this.completed = false; + this.logs = new ArrayList<>(); + this.errors = new ArrayList<>(); + } + @Override + public String toString() { + return "DataMigrationReport [completed=" + completed + ", logs=" + logs + ", errors=" + errors + "]"; + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DatabaseInfo.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DatabaseInfo.java new file mode 100644 index 000000000..a6e81343a --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/DatabaseInfo.java @@ -0,0 +1,63 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +/** + * @author Michael Dürre + * + */ +public class DatabaseInfo { + public final String doctype; + public final String alias; + private final String mapping; + private final String settingsFormat; + private final String index; + public String getIndex(String version) { + return this.index + version; + } + + public DatabaseInfo(String alias, String doctype, String mapping) { + this(alias,alias,doctype,mapping); + } + + public DatabaseInfo(String index,String alias, String doctype, String mapping) { + this(index,alias,doctype, mapping, + "{\"index\":{\"number_of_shards\":%d,\"number_of_replicas\":%d},\"analysis\":{\"analyzer\":{\"content\":" + + "{\"type\":\"custom\",\"tokenizer\":\"whitespace\"}}}}"); + } + + public DatabaseInfo(String index,String alias,String doctype, String mapping, String settingsformat) { + this.index = index; + this.alias = alias; + this.doctype = doctype; + this.mapping = mapping; + this.settingsFormat = settingsformat; + } + + + public String getMapping() { + return this.mapping==null?null:String.format("{\"%s\":{\"properties\":%s}}",this.doctype, this.mapping); + } + public String getSettings(int shards, int replicas) { + return String.format(this.settingsFormat, shards, replicas); + } +}
\ No newline at end of file diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/KeepDataSearchHitConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/KeepDataSearchHitConverter.java new file mode 100644 index 000000000..fa86c90e2 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/KeepDataSearchHitConverter.java @@ -0,0 +1,43 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; + +public class KeepDataSearchHitConverter implements SearchHitConverter { + + + private final ComponentName name; + + public KeepDataSearchHitConverter(ComponentName name) { + this.name = name; + } + @Override + public SearchHit convert(SearchHit source) { + return source; + } + + @Override + public ComponentData convert(DataContainer container) { + return container.getComponents().get(this.name); + } +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/MavenDatabasePluginInitFile.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/MavenDatabasePluginInitFile.java new file mode 100644 index 000000000..a63f8d4c1 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/MavenDatabasePluginInitFile.java @@ -0,0 +1,58 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.ReleaseInformation; + + +/** + * @author Michael Dürre + * + */ +public class MavenDatabasePluginInitFile { + private static final int replicas=1; + private static final int shards=5; + private static final String mappings="\"mappings\":%s"; + private static final String settings="\"settings\":{\"index\":{\"number_of_shards\":%d,\"number_of_replicas\":%d},\"analysis\":{\"analyzer\":{\"content\":"+ + "{\"type\":\"custom\",\"tokenizer\":\"whitespace\"}}}}"; + + public static void create(Release release, String filename) throws IOException { + + ReleaseInformation ri = ReleaseInformation.getInstance(release); + Set<ComponentName> comps=ri.getComponents(); + List<String> lines = new ArrayList<String>(); + for(ComponentName c:comps) { + lines.add(String.format("PUT:%s/:{"+settings+","+mappings+"}",ri.getIndex(c),shards,replicas,ri.getDatabaseMapping(c))); + lines.add(String.format("PUT:%s/_alias/%s/:{}", ri.getIndex(c),ri.getAlias(c))); + } + Files.write(new File(filename).toPath(),lines,StandardCharsets.UTF_8); + + } +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/Release.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/Release.java new file mode 100644 index 000000000..ae4522dc5 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/Release.java @@ -0,0 +1,98 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import org.onap.ccsdk.features.sdnr.wt.common.database.data.AliasesEntry; +import org.onap.ccsdk.features.sdnr.wt.common.database.data.EsVersion; + +public enum Release { + + EL_ALTO("el alto","_v1",new EsVersion(2,2,0),new EsVersion(2,2,0)), + FRANKFURT_R1("frankfurt-R1","-v2",new EsVersion(6,4,3),new EsVersion(6,8,6)), + FRANKFURT_R2("frankfurt-R2","",new EsVersion(6,4,3),new EsVersion(6,8,6)), + FRANKFURT_R3("frankfurt-R3","",new EsVersion(6,4,3),new EsVersion(6,8,6)), + + GUILIN("guilin","",new EsVersion(6,4,3),new EsVersion(6,8,6)); + + public static final Release CURRENT_RELEASE = Release.FRANKFURT_R1; + + private final String value; + private final String dbSuffix; + private final EsVersion minDbVersion; + private final EsVersion maxDbVersion; + + private Release(String s,String dbsuffix,EsVersion minDbVersion,EsVersion maxDbVersion) { + this.value = s; + this.dbSuffix=dbsuffix; + this.minDbVersion = minDbVersion; + this.maxDbVersion = maxDbVersion; + } + @Override + public String toString() { + return this.value; + } + public String getValue() { + return value; + } + public static Release getValueOf(String s) throws Exception { + //s = s.toLowerCase(); + for(Release p:Release.values()) { + if(p.value.equals(s)) { + return p; + } + } + throw new Exception("value not found"); + } + public static Release getValueBySuffix(String suffix) { + for(Release r:Release.values()) { + if(r.dbSuffix.equals(suffix)) + return r; + } + return null; + } + public static String getDbSuffix(AliasesEntry entry) throws Exception { + ComponentName comp = ComponentName.getValueOf(entry.getAlias()); + if(comp!=null) { + return entry.getIndex().substring(entry.getAlias().length()); + } + return null; + } + /** + * @return + */ + public String getDBSuffix() { + return this.dbSuffix; + } + /** + * @return + */ + public EsVersion getDBVersion() { + return this.minDbVersion; + } + /** + * @param dbVersion2 + * @return + */ + public boolean isDbInRange(EsVersion dbVersion) { + return dbVersion.isNewerOrEqualThan(minDbVersion) && dbVersion.isOlderOrEqualThan(maxDbVersion); + } +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/SearchHitConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/SearchHitConverter.java new file mode 100644 index 000000000..7a549ca86 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/data/SearchHitConverter.java @@ -0,0 +1,64 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data; + +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto.ElAltoReleaseInformation; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.frankfurt.FrankfurtReleaseInformation; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.guilin.GuilinReleaseInformation; + +public interface SearchHitConverter { + + /** + * convert single entry of database + * @param source + * @return + */ + public SearchHit convert(SearchHit source); + + /** + * @param component destination component + * @param container source data + * @return data for destination component + */ + public ComponentData convert(DataContainer container); + + + public static class Factory{ + public static SearchHitConverter getInstance(Release src,Release dst, ComponentName component) { + switch(src) { + case EL_ALTO: + return new ElAltoReleaseInformation().getConverter(dst, component); + case FRANKFURT_R1: + return new FrankfurtReleaseInformation().getConverter(dst, component); + case GUILIN: + return new GuilinReleaseInformation().getConverter(dst, component); + default: + return null; + + } + } + } + + + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/ElAltoReleaseInformation.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/ElAltoReleaseInformation.java new file mode 100644 index 000000000..559468f79 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/ElAltoReleaseInformation.java @@ -0,0 +1,92 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto; + +import java.util.HashMap; +import java.util.Map; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DatabaseInfo; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.KeepDataSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.SearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.ReleaseInformation; + +public class ElAltoReleaseInformation extends ReleaseInformation { + + + private Map<Release, Map<ComponentName, SearchHitConverter>> converters; + + public ElAltoReleaseInformation() { + super(Release.EL_ALTO, createDbInfos()); + this.converters = generateConverters(); + } + + private static Map<ComponentName, DatabaseInfo> createDbInfos() { + Map<ComponentName,DatabaseInfo> map = new HashMap<>(); + map.put(ComponentName.EVENTLOG, new DatabaseInfo("sdnevents","eventlog","")); + map.put(ComponentName.FAULTCURRENT, new DatabaseInfo("sdnevents","faultcurrent","")); + map.put(ComponentName.FAULTLOG, new DatabaseInfo("sdnevents","faultlog","")); + map.put(ComponentName.INVENTORY, new DatabaseInfo("sdnevents","inventoryequipment","")); + map.put(ComponentName.INVENTORYTOPLEVEL, new DatabaseInfo("sdnevents","inventorytoplevel","")); + map.put(ComponentName.HISTORICAL_PERFORMANCE_15M, new DatabaseInfo("sdnperformance","historicalperformance15min","")); + map.put(ComponentName.HISTORICAL_PERFORMANCE_24H, new DatabaseInfo("sdnperformance","historicalperformance24h","")); + map.put(ComponentName.REQUIRED_NETWORKELEMENT, new DatabaseInfo("mwtn","required-networkelement","{\"required-networkelement\": {\"date_detection\": false }}")); + map.put(ComponentName.MEDIATOR_SERVER, new DatabaseInfo("mwtn","mediator-server","")); + map.put(ComponentName.MAINTENANCE, new DatabaseInfo("mwtn","maintenancemode","")); + return map; + } + + /** + * @return components used in el alto + */ + + + private static Map<Release, Map<ComponentName, SearchHitConverter>> generateConverters() { + Map<Release, Map<ComponentName, SearchHitConverter>> c = new HashMap<>(); + Map<ComponentName, SearchHitConverter> frankfurtConverters = new HashMap<>(); + frankfurtConverters.put(ComponentName.EVENTLOG, new FrankfurtEventlogConverter()); + frankfurtConverters.put(ComponentName.FAULTCURRENT, new FrankfurtFaultcurrentConverter()); + frankfurtConverters.put(ComponentName.FAULTLOG, new FrankfurtFaultlogConverter()); + frankfurtConverters.put(ComponentName.INVENTORY, new KeepDataSearchHitConverter(ComponentName.INVENTORY)); + //obsolete in frankfurt + //frankfurtConverters.put(ComponentName.INVENTORYTOPLEVEL, new KeepDataSearchHitConverter(ComponentName.INVENTORYTOPLEVEL)); + frankfurtConverters.put(ComponentName.HISTORICAL_PERFORMANCE_15M, new KeepDataSearchHitConverter(ComponentName.HISTORICAL_PERFORMANCE_15M)); + frankfurtConverters.put(ComponentName.HISTORICAL_PERFORMANCE_24H, new KeepDataSearchHitConverter(ComponentName.HISTORICAL_PERFORMANCE_24H)); + frankfurtConverters.put(ComponentName.MAINTENANCE, new FrankfurtMaintenanceConverter()); + frankfurtConverters.put(ComponentName.MEDIATOR_SERVER, new KeepDataSearchHitConverter(ComponentName.MEDIATOR_SERVER)); + frankfurtConverters.put(ComponentName.REQUIRED_NETWORKELEMENT, new FrankfurtRequiredNetworkElementConverter()); + frankfurtConverters.put(ComponentName.CONNECTIONLOG,new FrankfurtConnectionlogConverter()); + c.put(Release.FRANKFURT_R1,frankfurtConverters); + return c; + } + + @Override + public SearchHitConverter getConverter(Release dst, ComponentName comp) { + SearchHitConverter c=this.converters.containsKey(dst)?this.converters.get(dst).get(comp):null; + if(c==null) { + c=super.getConverter(dst, comp); + } + return c; + } + + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtConnectionlogConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtConnectionlogConverter.java new file mode 100644 index 000000000..d68373199 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtConnectionlogConverter.java @@ -0,0 +1,120 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto; + +import java.util.Map; + +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.BaseSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentData; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataContainer; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.frankfurt.data.ConnectionLogStatus; + +/** + * + * @author Michael Dürre + * + * Convert data from el alto to frankfurt + * + * src: eventlog + * dst: connectionlog + * + * + * { + * "event": { + * "nodeName": "SDN-Controller-5a150173d678", + * "counter": "48", + * "timeStamp": "2019-10-07T09:57:08.2Z", + * "objectId": "Sim2230", + * "attributeName": "ConnectionStatus", + * "newValue": "connecting", + * "type": "AttributeValueChangedNotificationXml" + * } + * } + * + * => + * + * { + * "timestamp": "2020-01-28T12:00:10.2Z", + * "status": "Connected", + * "node-id": "sim1" + * } + * + */ +public class FrankfurtConnectionlogConverter extends BaseSearchHitConverter { + + public FrankfurtConnectionlogConverter() { + super(ComponentName.CONNECTIONLOG); + } + + /** + * @source eventlog searchhit converted to connectionlog entry + */ + @Override + public SearchHit convert(SearchHit source) { + + JSONObject data = new JSONObject(); + JSONObject inner = source.getSource().getJSONObject("event"); + String eventType = inner.getString("type"); + String eventSource = inner.getString("nodeName"); + if (!eventSource.startsWith("SDN-Controller")) { + return null; + } + data.put("node-id", inner.getString("objectId")); + data.put("timestamp", inner.getString("timeStamp")); + if (eventType.equals("AttributeValueChangedNotificationXml")) { + String event = inner.getString("newValue").toLowerCase(); + if (event.equals("connected")) { + data.put("status", ConnectionLogStatus.Connected.getName()); + } else if (event.equals("connecting")) { + data.put("status", ConnectionLogStatus.Connecting.getName()); + } else { + data.put("status", ConnectionLogStatus.UnableToConnect.getName()); + } + + } else if (eventType.equals("ObjectCreationNotificationXml")) { + data.put("status", ConnectionLogStatus.Mounted.getName()); + + } else if (eventType.equals("ObjectDeletionNotificationXml")) { + data.put("status", ConnectionLogStatus.Unmounted.getName()); + } + + return this.getSearchHit(source.getIndex(), source.getType(), source.getId(), data); + } + + @Override + public ComponentData convert(DataContainer container) { + Map<ComponentName, ComponentData> src = container.getComponents(); + if (!src.containsKey(ComponentName.EVENTLOG)) { + return null; + } + ComponentData eventData = src.get(ComponentName.EVENTLOG); + ComponentData dstData = new ComponentData(ComponentName.CONNECTIONLOG); + for (SearchHit sh : eventData) { + dstData.add(this.convert(sh)); + } + return dstData; + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtEventlogConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtEventlogConverter.java new file mode 100644 index 000000000..e04378bbe --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtEventlogConverter.java @@ -0,0 +1,55 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto; + +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.BaseSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentData; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataContainer; + +/** + * + * @author Michael Dürre + * + * + * Cannot be converted from el alto to frankfurt + * most of the entries are in connectionlog + * + */ +public class FrankfurtEventlogConverter extends BaseSearchHitConverter{ + + public FrankfurtEventlogConverter() { + super(ComponentName.EVENTLOG); + } + + @Override + public SearchHit convert(SearchHit source) { + return null; + } + + @Override + public ComponentData convert(DataContainer container) { + return null; + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtFaultcurrentConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtFaultcurrentConverter.java new file mode 100644 index 000000000..060434fe9 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtFaultcurrentConverter.java @@ -0,0 +1,80 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto; + +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.BaseSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; + +/** + * + * @author Michael Dürre + * + * { + * "faultCurrent": { + * "nodeName": "sim9090", + * "counter": "50443", + * "timeStamp": "2017-07-27T13:33:49.0Z", + * "objectId": "a2.module-1.1.5.6", + * "problem": "Ais", + * "severity": "Major", + * "type": "ProblemNotificationXml" + * } + * } + * + * => + * + * { + * "timestamp": "2017-01-01T00:00:00.0Z", + * "object-id": "LP-MWS-TTP-01", + * "severity": "Warning", + * "counter": 2, + * "node-id": "sim1", + * "problem": "unknownProblem2" + * } + */ +public class FrankfurtFaultcurrentConverter extends BaseSearchHitConverter { + + /** + * @param name + */ + public FrankfurtFaultcurrentConverter() { + super(ComponentName.FAULTCURRENT); + } + + @Override + public SearchHit convert(SearchHit source) { + + JSONObject data = new JSONObject(); + JSONObject src = source.getSource(); + JSONObject srcInner = src.getJSONObject("faultCurrent"); + data.put("node-id", srcInner.getString("nodeName")); + data.put("severity", srcInner.getString("severity")); + data.put("counter", Long.parseLong(srcInner.getString("counter"))); + data.put("timestamp", srcInner.getString("timeStamp")); + data.put("object-id",srcInner.getString("objectId")); + data.put("problem", srcInner.getString("problem")); + + return this.getSearchHit(source.getIndex(), source.getType(), source.getId(), data ); + } +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtFaultlogConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtFaultlogConverter.java new file mode 100644 index 000000000..87e71c612 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtFaultlogConverter.java @@ -0,0 +1,78 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto; + +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.BaseSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; + +/** + * + * @author Michael Dürre + *{ + * "fault": { + * "nodeName": "SDN-Controller-5a150173d678", + * "counter": "380", + * "timeStamp": "2019-10-18T18:40:25.0Z", + * "objectId": "ADVA-DTAG-Nuernberg-3", + * "problem": "connectionLossOAM", + * "severity": "Major", + * "type": "ProblemNotificationXml" + * } + *} + * + * => + *{ + * "timestamp": "2017-01-01T00:00:00.0Z", + * "object-id": "LP-MWPS-RADIO", + * "severity": "Critical", + * "counter": -1, + * "node-id": "sim1", + * "source-type": "Netconf", + * "problem": "signalIsLost" + *} + * + */ +public class FrankfurtFaultlogConverter extends BaseSearchHitConverter{ + + public FrankfurtFaultlogConverter() { + super(ComponentName.FAULTLOG); + } + + @Override + public SearchHit convert(SearchHit source) { + + JSONObject data = new JSONObject(); + JSONObject src = source.getSource(); + JSONObject srcInner = src.getJSONObject("fault"); + data.put("node-id", srcInner.getString("nodeName")); + data.put("severity", srcInner.getString("severity")); + data.put("counter", Long.parseLong(srcInner.getString("counter"))); + data.put("timestamp", srcInner.getString("timeStamp")); + data.put("object-id",srcInner.getString("objectId")); + data.put("problem", srcInner.getString("problem")); + data.put("type", "Netconf"); + return this.getSearchHit(source.getIndex(), source.getType(), source.getId(), data ); + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtMaintenanceConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtMaintenanceConverter.java new file mode 100644 index 000000000..16be5d97b --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtMaintenanceConverter.java @@ -0,0 +1,86 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto; + +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.BaseSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; + +/** + * convert maintenance object from el alto version to frankfurt + * + * @author jack + * + *{ + * "node": "ddd", + * "filter": [ + * { + * "definition": { + * "object-id-ref": "", + * "problem": "" + * }, + * "description": "", + * "start": "2019-11-26T15:37+00:00", + * "end": "2019-11-26T23:37+00:00" + * }], + * "active": false + *} + * => + *{ + * "id": "sim1" + * "node-id": "sim1", + * "description": "", + * "start": "2020-01-28T12:00:17.6Z", + * "end": "2020-01-28T12:00:17.6Z", + * "active": false, + * "object-id-ref": "", + * "problem": "" + * + */ +public class FrankfurtMaintenanceConverter extends BaseSearchHitConverter { + + public FrankfurtMaintenanceConverter() { + super(ComponentName.MAINTENANCE); + } + + @Override + public SearchHit convert(SearchHit source) { + + JSONObject src = source.getSource(); + JSONObject data = new JSONObject(); + data.put("id", src.getString("node")); + data.put("node-id", src.getString("node")); + data.put("active", src.getBoolean("active")); + JSONObject filter = null; + if (src.has("filter")) { + filter = src.getJSONArray("filter").length() > 0 ? src.getJSONArray("filter").getJSONObject(0) : null; + } + data.put("start", filter != null ? filter.getString("start") : ""); + data.put("end", filter != null ? filter.getString("end") : ""); + data.put("description", filter != null ? filter.getString("description") : ""); + JSONObject definition = filter!=null?filter.has("definition")?filter.getJSONObject("definition"):null:null; + data.put("problem", definition!=null?definition.getString("problem"):""); + data.put("object-id-ref", definition!=null?definition.getString("object-id-ref"):""); + return this.getSearchHit(source.getIndex(), source.getType(), source.getId(), data); + } +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtRequiredNetworkElementConverter.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtRequiredNetworkElementConverter.java new file mode 100644 index 000000000..ef6de907e --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/elalto/FrankfurtRequiredNetworkElementConverter.java @@ -0,0 +1,78 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto; + +import org.json.JSONObject; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.BaseSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.frankfurt.data.ConnectionLogStatus; + +/** + * + * @author Michael Dürre + * + * { + * "mountId":"nts-manager-dev-micha", + * "host":"10.20.5.2", + * "port":8300, + * "username":"netconf", + * "password":"netconf" + * } + * + * => + * + * { + * "node-id": "sim1", + * "is-required": true, + * "password": "ads", + * "port": 12600, + * "host": "10.20.5.2", + * "id": "sim1", + * "username": "ad", + * "status": "Connected" + * } + * + */ +public class FrankfurtRequiredNetworkElementConverter extends BaseSearchHitConverter{ + + public FrankfurtRequiredNetworkElementConverter() { + super(ComponentName.REQUIRED_NETWORKELEMENT); + } + + @Override + public SearchHit convert(SearchHit source) { + + JSONObject data = new JSONObject(); + JSONObject src = source.getSource(); + data.put("id", src.getString("mountId")); + data.put("node-id", src.getString("mountId")); + data.put("username", src.getString("username")); + data.put("password", src.getString("password")); + data.put("host", src.getString("host")); + data.put("port", src.getInt("port")); + data.put("status", ConnectionLogStatus.Undefined.getName()); + data.put("is-required", true); + return this.getSearchHit(source.getIndex(), source.getType(), source.getId(), data ); + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/frankfurt/FrankfurtReleaseInformation.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/frankfurt/FrankfurtReleaseInformation.java new file mode 100644 index 000000000..f83263b62 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/frankfurt/FrankfurtReleaseInformation.java @@ -0,0 +1,77 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.frankfurt; + +import java.util.HashMap; +import java.util.Map; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DatabaseInfo; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.SearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.ReleaseInformation; + +public class FrankfurtReleaseInformation extends ReleaseInformation { + + private final Map<Release, Map<ComponentName, SearchHitConverter>> converters = new HashMap<>(); + + public FrankfurtReleaseInformation() { + super(Release.FRANKFURT_R1, createDBMap()); + } + + private static Map<ComponentName, DatabaseInfo> createDBMap() { + Map<ComponentName, DatabaseInfo> map = new HashMap<>(); + map.put(ComponentName.CONNECTIONLOG, new DatabaseInfo("connectionlog", "connectionlog", + "{\"node-id\": {\"type\": \"keyword\"},\"timestamp\": {\"type\": \"date\"},\"status\": {\"type\": \"keyword\"}}")); + map.put(ComponentName.EVENTLOG, new DatabaseInfo("eventlog", "eventlog", + "{\"node-id\": {\"type\": \"keyword\"},\"source-type\": {\"type\": \"keyword\"},\"timestamp\": {\"type\": \"date\"},\"new-value\": {\"type\": \"keyword\"},\"attribute-name\": {\"type\": \"keyword\"},\"counter\": {\"type\": \"long\"},\"object-id\": {\"type\": \"keyword\"}}")); + map.put(ComponentName.FAULTCURRENT, new DatabaseInfo("faultcurrent", "faultcurrent", + "{\"node-id\": {\"type\": \"keyword\"},\"severity\": {\"type\": \"keyword\"},\"timestamp\": {\"type\": \"date\"},\"problem\": {\"type\": \"keyword\"},\"counter\": {\"type\": \"long\"},\"object-id\":{\"type\": \"keyword\"}}")); + map.put(ComponentName.FAULTLOG, new DatabaseInfo("faultlog", "faultlog", + "{\"node-id\": {\"type\": \"keyword\"},\"severity\": {\"type\": \"keyword\"},\"timestamp\": {\"type\": \"date\"},\"problem\": {\"type\": \"keyword\"},\"counter\": {\"type\": \"long\"},\"object-id\":{\"type\": \"keyword\"},\"source-type\":{\"type\": \"keyword\"}}")); + map.put(ComponentName.INVENTORY, new DatabaseInfo("inventoryequipment", "inventoryequipment", + "{\"date\": {\"type\": \"keyword\"},\"model-identifier\": {\"type\": \"keyword\"},\"manufacturer-identifier\": {\"type\": \"keyword\"},\"type-name\": {\"type\": \"keyword\"},\"description\": {\"type\": \"keyword\"},\"uuid\": {\"type\": \"keyword\"},\"version\": {\"type\": \"keyword\"},\"parent-uuid\": {\"type\": \"keyword\"},\"contained-holder\": {\"type\": \"keyword\"},\"node-id\": {\"type\": \"keyword\"},\"tree-level\": {\"type\": \"long\"},\"part-type-id\": {\"type\": \"keyword\"},\"serial\": {\"type\": \"keyword\"}}")); + map.put(ComponentName.HISTORICAL_PERFORMANCE_15M, new DatabaseInfo("historicalperformance15min", + "historicalperformance15min", + "{\"node-name\":{\"type\": \"keyword\"},\"timestamp\":{\"type\": \"date\"},\"suspect-interval-flag\":{\"type\":\"boolean\"},\"scanner-id\":{\"type\": \"keyword\"},\"uuid-interface\":{\"type\": \"keyword\"},\"layer-protocol-name\":{\"type\": \"keyword\"},\"granularity-period\":{\"type\": \"keyword\"},\"radio-signal-id\":{\"type\": \"keyword\"}}")); + map.put(ComponentName.HISTORICAL_PERFORMANCE_24H, new DatabaseInfo("historicalperformance24h", + "historicalperformance24h", + "{\"node-name\":{\"type\": \"keyword\"},\"timestamp\":{\"type\": \"date\"},\"suspect-interval-flag\":{\"type\":\"boolean\"},\"scanner-id\":{\"type\": \"keyword\"},\"uuid-interface\":{\"type\": \"keyword\"},\"layer-protocol-name\":{\"type\": \"keyword\"},\"granularity-period\":{\"type\": \"keyword\"},\"radio-signal-id\":{\"type\": \"keyword\"}}")); + map.put(ComponentName.REQUIRED_NETWORKELEMENT, new DatabaseInfo("networkelement-connection", + "networkelement-connection", + "{\"node-id\": {\"type\": \"keyword\"},\"host\": {\"type\": \"keyword\"},\"port\": {\"type\": \"long\"},\"username\": {\"type\": \"keyword\"},\"password\": {\"type\": \"keyword\"},\"core-model-capability\": {\"type\": \"keyword\"},\"device-type\": {\"type\": \"keyword\"},\"is-required\": {\"type\": \"boolean\"},\"status\": {\"type\": \"keyword\"}}")); + map.put(ComponentName.MEDIATOR_SERVER, new DatabaseInfo("mediator-server", "mediator-server", + "{\"url\":{\"type\": \"keyword\"},\"name\":{\"type\": \"keyword\"}}")); + map.put(ComponentName.MAINTENANCE, new DatabaseInfo("maintenancemode", "maintenancemode", + "{\"node-id\": {\"type\": \"keyword\"},\"active\": {\"type\": \"boolean\"}},\"date_detection\":false}}")); + return map; + } + + @Override + public SearchHitConverter getConverter(Release dst, ComponentName comp) { + SearchHitConverter c=this.converters.containsKey(dst)?this.converters.get(dst).get(comp):null; + if(c==null) { + c=super.getConverter(dst, comp); + } + return c; + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/frankfurt/data/ConnectionLogStatus.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/frankfurt/data/ConnectionLogStatus.java new file mode 100644 index 000000000..7615c4452 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/frankfurt/data/ConnectionLogStatus.java @@ -0,0 +1,38 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.frankfurt.data; + +/** + * @author Michael Dürre + * + */ +public enum ConnectionLogStatus { + Connected, Connecting, UnableToConnect, Mounted, Unmounted, Undefined; + + /** + * @return + */ + public String getName() { + return this.name(); + } + +} diff --git a/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/guilin/GuilinReleaseInformation.java b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/guilin/GuilinReleaseInformation.java new file mode 100644 index 000000000..4912e4bc4 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/guilin/GuilinReleaseInformation.java @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.guilin; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.KeepDataSearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.SearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.ReleaseInformation; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DatabaseInfo; + +public class GuilinReleaseInformation extends ReleaseInformation { + + /** + * @param r + * @param dbMap + */ + public GuilinReleaseInformation() { + super(Release.GUILIN, createDBMap()); + + } + + private static Map<ComponentName, DatabaseInfo> createDBMap() { + Map<ComponentName, DatabaseInfo> map = new HashMap<>(); + map.put(ComponentName.EVENTLOG, new DatabaseInfo("eventlog", "eventlog", "")); + map.put(ComponentName.FAULTCURRENT, new DatabaseInfo("faultcurrent", "faultcurrent", "")); + map.put(ComponentName.FAULTLOG, new DatabaseInfo("faultlog", "faultlog", "")); + map.put(ComponentName.INVENTORY, new DatabaseInfo("inventoryequipment", "inventoryequipment", "")); + map.put(ComponentName.HISTORICAL_PERFORMANCE_15M, + new DatabaseInfo("historicalperformance15min", "historicalperformance15min", "")); + map.put(ComponentName.HISTORICAL_PERFORMANCE_24H, + new DatabaseInfo("historicalperformance24h", "historicalperformance24h", "")); + map.put(ComponentName.REQUIRED_NETWORKELEMENT, + new DatabaseInfo("networkelement-connection", "networkelement-connection", "")); + map.put(ComponentName.MEDIATOR_SERVER, new DatabaseInfo("mediator-server", "mediator-server", "")); + map.put(ComponentName.MAINTENANCE, new DatabaseInfo("maintenancemode", "maintenancemode", "")); + return map; + } + + @Override + public SearchHitConverter getConverter(Release dst, ComponentName comp) { + if (dst == Release.GUILIN) { + return new KeepDataSearchHitConverter(comp); + } + return null; + } + +} diff --git a/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestData.java b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestData.java new file mode 100644 index 000000000..c17ef8b2d --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestData.java @@ -0,0 +1,171 @@ +/******************************************************************************* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * 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. + * ============LICENSE_END========================================================================== + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.IOException; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.common.test.JSONAssert; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentData; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ConfigData; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ConfigName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataContainer; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataMigrationReport; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.MavenDatabasePluginInitFile; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; + +/** + * @author Michael Dürre + * + */ +public class TestData { + private static final JSONObject EVENTLOG_SEARCHHIT = new JSONObject("{\n" + "\"_index\": \"sdnevents_v1\",\n" + + "\"_type\": \"eventlog\",\n" + "\"_id\": \"AXB7cJHlZ_FApnwi29xq\",\n" + "\"_version\": 1,\n" + + "\"_score\": 1,\n" + "\"_source\": {\n" + "\"event\": {\n" + + "\"nodeName\": \"SDN-Controller-465e2ae306ca\",\n" + "\"counter\": \"1\",\n" + + "\"timeStamp\": \"2020-02-25T08:22:19.8Z\",\n" + "\"objectId\": \"sim2230\",\n" + + "\"attributeName\": \"ConnectionStatus\",\n" + "\"newValue\": \"connecting\",\n" + + "\"type\": \"AttributeValueChangedNotificationXml\"\n" + "}\n" + "}\n" + "}"); + private static final JSONObject EVENTLOG_SEARCHHIT2= new JSONObject("{\n" + "\"_index\": \"sdnevents_v1\",\n" + + "\"_type\": \"eventlog\",\n" + "\"_id\": \"AXB7cJHlZ_FApnwi29xq\",\n" + "\"_version\": 1,\n" + + "\"_score\": 1,\n" + "\"_source\": {\n" + "\"event\": {\n" + + "\"nodeName\": \"SDN-Controller-465e2ae306ca\",\n" + "\"counter\": \"3\",\n" + + "\"timeStamp\": \"2020-02-22T08:22:19.8Z\",\n" + "\"objectId\": \"sim2230\",\n" + + "\"attributeName\": \"ConnectionStatus\",\n" + "\"newValue\": \"connected\",\n" + + "\"type\": \"AttributeValueChangedNotificationXml\"\n" + "}\n" + "}\n" + "}"); + private static final String CONFIG_CONTENT = "[dcae]\n" + + "dcaeUserCredentials=admin:admin\n" + + "dcaeUrl=off\n" + + "dcaeHeartbeatPeriodSeconds=120\n" + + "dcaeTestCollector=no\n" + + "\n" + + "[es]\n" + + "esCluster=sendateodl5\n" + + "#time limit to keep increasing data in database [in seconds]\n" + + "#60*60*24*30 (30days)\n" + + "esArchiveLimit=2592000\n" + + "#folder where removed data will be stored\n" + + "esArchiveFolder=./backup\n" + + "#interval to archive database [in seconds]\n" + + "#60*60*24 (1day)\n" + + "esArchiveInterval=86400\n" + + "\n" + + "[aai]\n" + + "#keep comment\n" + + "aaiHeaders=[\"X-TransactionId: 9999\"]\n" + + "aaiUrl=http://localhost:81\n" + + "aaiUserCredentials=AAI:AAI\n" + + "aaiDeleteOnMountpointRemove=false\n" + + "aaiTrustAllCerts=false\n" + + "aaiApiVersion=aai/v13\n" + + "aaiPropertiesFile=aaiclient.properties\n" + + "aaiApplicationId=SDNR\n" + + "aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12\n" + + "aaiPcks12ClientCertPassphrase=adminadmin\n" + + "aaiClientConnectionTimeout=30000\n" + + "\n" + + "[pm]\n" + + "pmCluster=sendateodl5\n" + + "pmEnabled=true\n" + + ""; + @Test + public void testComponentData() { + JSONArray hits = new JSONArray(); + hits.put(EVENTLOG_SEARCHHIT); + hits.put(EVENTLOG_SEARCHHIT2); + ComponentData data = new ComponentData(ComponentName.EVENTLOG,hits); + JSONArray out = data.toJsonArray(); + assertEquals(ComponentName.EVENTLOG, data.getName()); + JSONAssert.assertEquals(EVENTLOG_SEARCHHIT.toString(),out.getJSONObject(0).toString(),false); + JSONAssert.assertEquals(EVENTLOG_SEARCHHIT2.toString(),out.getJSONObject(1).toString(),false); + + } + @Test + public void testConfigData() { + ConfigData data = new ConfigData(CONFIG_CONTENT); + assertTrue(data.getLines().length>10); + } + @Test + public void testConfigName() { + ConfigName name = ConfigName.APIGATEWAY; + assertEquals("apigateway", name.getValue()); + try { + assertEquals(ConfigName.APIGATEWAY,ConfigName.getValueOf("apigateway")); + } catch (Exception e) { + fail(e.getMessage()); + } + + } + @Test + public void testDataContainer() { + DataContainer container = new DataContainer(); + assertEquals(Release.CURRENT_RELEASE,container.getRelease()); + assertNotNull(container.getCreated()); + + try { + container = DataContainer.load(new File("src/test/resources/test.bak.json")); + } catch (Exception e) { + fail(e.getMessage()); + } + assertNotNull(container); + assertEquals(Release.EL_ALTO,container.getRelease()); + assertNotNull(container.getCreated()); + assertTrue(container.getComponents().size()>0); + assertTrue(container.getConfigs().size()==0); + } + @Test + public void testReport() { + DataMigrationReport report = new DataMigrationReport(); + + assertFalse(report.completed()); + long myvar = 42; + String myvar2 = "come"; + report.log("%d was wrong",myvar); + report.error("%s to me",myvar2); + assertTrue(report.toString().contains("42 was wrong")); + assertTrue(report.toString().contains("come to me")); + report.setCompleted(true); + assertTrue(report.completed()); + + } + @Test + public void TestPluginFileCreation() { + + final String TESTFILE = "asi324po.sa"; + try { + MavenDatabasePluginInitFile.create(Release.FRANKFURT_R1, TESTFILE); + } catch (IOException e) { + fail(e.getMessage()); + } + File f = new File(TESTFILE); + if(f.exists()) { + f.delete(); + } + } + +} diff --git a/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestElAltoReleaseInformation.java b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestElAltoReleaseInformation.java new file mode 100644 index 000000000..6c949df51 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestElAltoReleaseInformation.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk features + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * 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. + * ============LICENSE_END========================================================================== + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.Set; + +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto.ElAltoReleaseInformation; + +public class TestElAltoReleaseInformation { + + @Test + public void test() { + ElAltoReleaseInformation ri = new ElAltoReleaseInformation(); + Set<ComponentName> components = ri.getComponents(); + assertFalse(components.contains(ComponentName.CONNECTIONLOG)); + assertTrue(components.contains(ComponentName.EVENTLOG)); + assertEquals("sdnevents",ri.getAlias(ComponentName.FAULTLOG)); + assertEquals("sdnevents_v1",ri.getIndex(ComponentName.FAULTLOG)); + assertNull(ri.getConverter(Release.EL_ALTO,ComponentName.CONNECTIONLOG)); + assertNotNull(ri.getConverter(Release.EL_ALTO, ComponentName.FAULTCURRENT)); + } + +} diff --git a/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestElAltoToFrankfurtConversion.java b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestElAltoToFrankfurtConversion.java new file mode 100644 index 000000000..3770cea67 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestElAltoToFrankfurtConversion.java @@ -0,0 +1,133 @@ +/******************************************************************************* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * 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. + * ============LICENSE_END========================================================================== + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.json.JSONObject; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.SearchHitConverter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.elalto.ElAltoReleaseInformation; + +/** + * @author Michael Dürre + * + */ +public class TestElAltoToFrankfurtConversion { + + private static final JSONObject FAULTLOG_SEARCHHIT = new JSONObject("{\n" + "\"_index\": \"sdnevents_v1\",\n" + + "\"_type\": \"faultlog\",\n" + "\"_id\": \"sim12600/LP-MWS-TTP-01/unknownProblem1\",\n" + + "\"_version\": 1,\n" + "\"_score\": 1,\n" + "\"_source\": {\n" + "\"fault\": {\n" + + "\"nodeName\": \"sim12600\",\n" + "\"counter\": \"1\",\n" + "\"timeStamp\": \"2017-01-01T00:00:00.0Z\",\n" + + "\"objectId\": \"LP-MWS-TTP-01\",\n" + "\"problem\": \"unknownProblem1\",\n" + + "\"severity\": \"Critical\",\n" + "\"type\": \"ProblemNotificationXml\"\n" + "}\n" + "}\n" + "}"); + private static final JSONObject FAULTCURRENT_SEARCHHIT = new JSONObject("{\n" + "\"_index\": \"sdnevents_v1\",\n" + + "\"_type\": \"faultcurrent\",\n" + "\"_id\": \"sim12600/LP-MWS-TTP-01/unknownProblem1\",\n" + + "\"_version\": 1,\n" + "\"_score\": 1,\n" + "\"_source\": {\n" + "\"faultCurrent\": {\n" + + "\"nodeName\": \"sim12600\",\n" + "\"counter\": \"1\",\n" + "\"timeStamp\": \"2017-01-01T00:00:00.0Z\",\n" + + "\"objectId\": \"LP-MWS-TTP-01\",\n" + "\"problem\": \"unknownProblem1\",\n" + + "\"severity\": \"Critical\",\n" + "\"type\": \"ProblemNotificationXml\"\n" + "}\n" + "}\n" + "}"); + private static final JSONObject INVENTORY_SEARCHHIT = new JSONObject( + "{\n" + "\"_index\": \"sdnevents_v1\",\n" + "\"_type\": \"inventoryequipment\",\n" + + "\"_id\": \"sim12600/a2.module-1.1.5.5\",\n" + "\"_version\": 1,\n" + "\"_score\": 1,\n" + + "\"_source\": {\n" + "\"treeLevel\": 2,\n" + "\"parentUuid\": \"CARD-1.1.5.0\",\n" + + "\"mountpoint\": \"sim12600\",\n" + "\"uuid\": \"a2.module-1.1.5.5\",\n" + + "\"containedHolder\": [\n" + "\"SUBRACK-1.55.0.0\"\n" + "],\n" + "\"manufacturerName\": null,\n" + + "\"manufacturerIdentifier\": \"ONF-Wireless-Transport\",\n" + "\"serial\": \"310330015\",\n" + + "\"date\": \"2013-04-13T00:00:00.0Z\",\n" + "\"version\": \"a2.module-newest\",\n" + + "\"description\": \"WS/p8.module/a2.module#5\",\n" + "\"partTypeId\": \"3EM23141AD01\",\n" + + "\"modelIdentifier\": \"CRPQABVFAA\",\n" + "\"typeName\": \"a2.module\"\n" + "}\n" + "}"); + private static final JSONObject REQUIREDNE_SEARCHHIT = new JSONObject("{\n" + "\"_index\": \"mwtn_v1\",\n" + + "\"_type\": \"required-networkelement\",\n" + "\"_id\": \"sim2230\",\n" + "\"_version\": 1,\n" + + "\"_score\": 1,\n" + "\"_source\": {\n" + "\"mountId\": \"sim2230\",\n" + "\"host\": \"10.20.5.2\",\n" + + "\"port\": 2230,\n" + "\"username\": \"adsa\",\n" + "\"password\": \"asda\"\n" + "}\n" + "}"); + private static final JSONObject EVENTLOG_SEARCHHIT = new JSONObject("{\n" + "\"_index\": \"sdnevents_v1\",\n" + + "\"_type\": \"eventlog\",\n" + "\"_id\": \"AXB7cJHlZ_FApnwi29xq\",\n" + "\"_version\": 1,\n" + + "\"_score\": 1,\n" + "\"_source\": {\n" + "\"event\": {\n" + + "\"nodeName\": \"SDN-Controller-465e2ae306ca\",\n" + "\"counter\": \"1\",\n" + + "\"timeStamp\": \"2020-02-25T08:22:19.8Z\",\n" + "\"objectId\": \"sim2230\",\n" + + "\"attributeName\": \"ConnectionStatus\",\n" + "\"newValue\": \"connecting\",\n" + + "\"type\": \"AttributeValueChangedNotificationXml\"\n" + "}\n" + "}\n" + "}"); + private static final JSONObject MAINTENANCE_SEARCHHIT = new JSONObject("{\n" + + "\"_index\": \"mwtn_v1\",\n" + + "\"_type\": \"maintenancemode\",\n" + + "\"_id\": \"sim2230\",\n" + + "\"_version\": 1,\n" + + "\"_score\": 1,\n" + + "\"_source\": {\n" + + "\"node\": \"sim2230\",\n" + + "\"filter\": [\n" + + "{\n" + + "\"definition\": {\n" + + "\"object-id-ref\": \"\",\n" + + "\"problem\": \"\"\n" + + "},\n" + + "\"description\": \"\",\n" + + "\"start\": \"\",\n" + + "\"end\": \"\"\n" + + "}\n" + + "],\n" + + "\"active\": false\n" + + "}\n" + + "}"); + @Test + public void test() { + ElAltoReleaseInformation ri = new ElAltoReleaseInformation(); + //faultlog + SearchHitConverter faultlogConverter = ri.getConverter(Release.FRANKFURT_R1, ComponentName.FAULTLOG); + assertNotNull(faultlogConverter); + SearchHit frankfurtFaultlogEntry = faultlogConverter.convert(new SearchHit(FAULTLOG_SEARCHHIT)); + assertNotNull(frankfurtFaultlogEntry); + //faultcurrent + SearchHitConverter faultcurrentConverter = ri.getConverter(Release.FRANKFURT_R1, ComponentName.FAULTCURRENT); + assertNotNull(faultcurrentConverter); + SearchHit frankfurtFaultcurrentEntry = faultcurrentConverter.convert(new SearchHit(FAULTCURRENT_SEARCHHIT)); + assertNotNull(frankfurtFaultcurrentEntry); + //inventory + SearchHitConverter inventoryConverter = ri.getConverter(Release.FRANKFURT_R1, ComponentName.INVENTORY); + assertNotNull(inventoryConverter); + SearchHit frankfurtInventory = inventoryConverter.convert(new SearchHit(INVENTORY_SEARCHHIT)); + assertNotNull(frankfurtInventory); + //inventory + SearchHitConverter neConverter = ri.getConverter(Release.FRANKFURT_R1, ComponentName.REQUIRED_NETWORKELEMENT); + assertNotNull(neConverter); + SearchHit frankfurtNE = neConverter.convert(new SearchHit(REQUIREDNE_SEARCHHIT)); + assertNotNull(frankfurtNE); + //eventlog + SearchHitConverter eventlogConverter = ri.getConverter(Release.FRANKFURT_R1, ComponentName.EVENTLOG); + assertNotNull(eventlogConverter); + SearchHit frankfurtEvent = eventlogConverter.convert(new SearchHit(EVENTLOG_SEARCHHIT)); + assertNull(frankfurtEvent); + //eventlog->connectionlog + SearchHitConverter conlogConverter = ri.getConverter(Release.FRANKFURT_R1, ComponentName.CONNECTIONLOG); + assertNotNull(conlogConverter); + SearchHit frankfurtconlog = conlogConverter.convert(new SearchHit(EVENTLOG_SEARCHHIT)); + assertNotNull(frankfurtconlog); + //maintenance + SearchHitConverter maintenanceConverter = ri.getConverter(Release.FRANKFURT_R1, ComponentName.MAINTENANCE); + assertNotNull(maintenanceConverter); + SearchHit frankfurtmaint = maintenanceConverter.convert(new SearchHit(MAINTENANCE_SEARCHHIT)); + assertNotNull(frankfurtmaint); + + } + +} diff --git a/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestFrankfurtReleaseInformation.java b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestFrankfurtReleaseInformation.java new file mode 100644 index 000000000..6cdde651a --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestFrankfurtReleaseInformation.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * 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. + * ============LICENSE_END========================================================================== + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.Set; + +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.ComponentName; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.frankfurt.FrankfurtReleaseInformation; + +public class TestFrankfurtReleaseInformation { + + @Test + public void test() { + FrankfurtReleaseInformation ri = new FrankfurtReleaseInformation(); + Set<ComponentName> components = ri.getComponents(); + assertFalse(components.contains(ComponentName.INVENTORYTOPLEVEL)); + assertTrue(components.contains(ComponentName.EVENTLOG)); + assertEquals("faultlog",ri.getAlias(ComponentName.FAULTLOG)); + assertEquals("faultlog-v2",ri.getIndex(ComponentName.FAULTLOG)); + assertNull(ri.getConverter(Release.FRANKFURT_R1,ComponentName.INVENTORYTOPLEVEL)); + assertNotNull(ri.getConverter(Release.FRANKFURT_R1, ComponentName.FAULTCURRENT)); + } + +} diff --git a/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestGuilinReleaseInformation.java b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestGuilinReleaseInformation.java new file mode 100644 index 000000000..a376facc7 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestGuilinReleaseInformation.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk features + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * 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. + * ============LICENSE_END========================================================================== + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.guilin.GuilinReleaseInformation; + +public class TestGuilinReleaseInformation { + + @Test + public void test() { + new GuilinReleaseInformation(); + } + +} diff --git a/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestMigrationProvider.java b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestMigrationProvider.java new file mode 100644 index 000000000..82283f5a3 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/setup/TestMigrationProvider.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt + * ================================================================================================= + * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * 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. + * ============LICENSE_END========================================================================== + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.DataMigrationProviderImpl; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.DataMigrationReport; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.setup.data.Release; + +/** + * @author Michael Dürre + * + */ +public class TestMigrationProvider { + + private static final String FRANKFURT_BACKUP_FILE = "src/test/resources/test2.bak.json"; + public static HostInfo[] hosts = new HostInfo[] { new HostInfo("localhost", Integer + .valueOf(System.getProperty("databaseport") != null ? System.getProperty("databaseport") : "49200")) }; + + @Test + public void testCreateImport() { + DataMigrationProviderImpl provider = new DataMigrationProviderImpl(hosts, null, null,true); + + try { + //create el alto db infrastructure + provider.initDatabase(Release.FRANKFURT_R1, 5, 1, "", true); + //import data into database + DataMigrationReport report = provider.importData(FRANKFURT_BACKUP_FILE, false, Release.FRANKFURT_R1); + assertTrue(report.completed()); + assertEquals(Release.FRANKFURT_R1, provider.autoDetectRelease()); + } catch (Exception e) { + fail(e.getMessage()); + } + } +} diff --git a/sdnr/wt/data-provider/setup/src/test/resources/test.bak.json b/sdnr/wt/data-provider/setup/src/test/resources/test.bak.json new file mode 100644 index 000000000..103299ac3 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/resources/test.bak.json @@ -0,0 +1 @@ +{"configs":{},"components":{"inventorytoplevel":[{"_index":"sdnevents_v1","_type":"inventorytoplevel","_source":{"uuidList":["SHELF-1.1.0.0","IDU-1.55.0.0","ODU-1.56.0.0","IDU-1.65.0.0"],"mountpoint":"sim12600"},"_id":"sim12600","_score":1},{"_index":"sdnevents_v1","_type":"inventorytoplevel","_source":{"uuidList":[],"mountpoint":"sim2230"},"_id":"sim2230","_score":1}],"required-networkelement":[{"_index":"mwtn_v1","_type":"required-networkelement","_source":{"mountId":"sim12600","password":"asda","port":12600,"host":"10.20.5.2","username":"adsa"},"_id":"sim12600","_score":1},{"_index":"mwtn_v1","_type":"required-networkelement","_source":{"mountId":"sim2230","password":"asda","port":2230,"host":"10.20.5.2","username":"adsa"},"_id":"sim2230","_score":1}],"faultlog":[],"faultcurrent":[{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Critical","problem":"signalIsLost","counter":"2","type":"ProblemNotificationXml","objectId":"LP-MWPS-TTP-01"}},"_id":"sim12600/LP-MWPS-TTP-01/signalIsLost","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-06-30T18:28:13.0Z","severity":"Minor","problem":"BatteryBFail","counter":"5","type":"ProblemNotificationXml","objectId":"SHELF-1.1.0.0"}},"_id":"sim12600/SHELF-1.1.0.0/BatteryBFail","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-07-27T13:38:55.0Z","severity":"Major","problem":"CableLOS","counter":"50446","type":"ProblemNotificationXml","objectId":"ODU-1.56.0.0"}},"_id":"sim12600/ODU-1.56.0.0/CableLOS","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Warning","problem":"unknownProblem2","counter":"2","type":"ProblemNotificationXml","objectId":"LP-MWS-TTP-01"}},"_id":"sim12600/LP-MWS-TTP-01/unknownProblem2","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim2230","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Critical","problem":"signalIsLost","counter":"1","type":"ProblemNotificationXml","objectId":"LP-MWPS-TTP-RADIO"}},"_id":"sim2230/LP-MWPS-TTP-RADIO/signalIsLost","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Critical","problem":"unknownProblem1","counter":"1","type":"ProblemNotificationXml","objectId":"LP-MWS-TTP-01"}},"_id":"sim12600/LP-MWS-TTP-01/unknownProblem1","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Critical","problem":"signalIsLost","counter":"2","type":"ProblemNotificationXml","objectId":"LP-MWPS-TTP-02"}},"_id":"sim12600/LP-MWPS-TTP-02/signalIsLost","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Critical","problem":"unknownProblem1","counter":"1","type":"ProblemNotificationXml","objectId":"LP-MWS-TTP-02"}},"_id":"sim12600/LP-MWS-TTP-02/unknownProblem1","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim12600","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Warning","problem":"unknownProblem2","counter":"2","type":"ProblemNotificationXml","objectId":"LP-MWS-TTP-02"}},"_id":"sim12600/LP-MWS-TTP-02/unknownProblem2","_score":1},{"_index":"sdnevents_v1","_type":"faultcurrent","_source":{"faultCurrent":{"nodeName":"sim2230","timeStamp":"2017-01-01T00:00:00.0Z","severity":"Critical","problem":"rslIsExceeded","counter":"2","type":"ProblemNotificationXml","objectId":"LP-MWPS-TTP-RADIO"}},"_id":"sim2230/LP-MWPS-TTP-RADIO/rslIsExceeded","_score":1}],"eventlog":[{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T08:22:18.7Z","counter":"0","type":"ObjectCreationNotificationXml","objectId":"sim2230"}},"_id":"AXB7cI7WZ_FApnwi29xp","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T11:26:24.3Z","newValue":"connecting","attributeName":"ConnectionStatus","counter":"8","type":"AttributeValueChangedNotificationXml","objectId":"sim2230"}},"_id":"AXB8GRhSZ_FApnwi29x-","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T08:22:34.8Z","newValue":"connecting","attributeName":"ConnectionStatus","counter":"4","type":"AttributeValueChangedNotificationXml","objectId":"sim12600"}},"_id":"AXB7cMxTZ_FApnwi29xt","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T10:22:58.0Z","newValue":"connecting","attributeName":"ConnectionStatus","counter":"6","type":"AttributeValueChangedNotificationXml","objectId":"sim12600"}},"_id":"AXB73wQQZ_FApnwi29x2","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T11:26:27.0Z","newValue":"connected","attributeName":"ConnectionStatus","counter":"9","type":"AttributeValueChangedNotificationXml","objectId":"sim2230"}},"_id":"AXB8GSLnZ_FApnwi29x_","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T08:22:26.3Z","newValue":"connected","attributeName":"ConnectionStatus","counter":"2","type":"AttributeValueChangedNotificationXml","objectId":"sim2230"}},"_id":"AXB7cKsFZ_FApnwi29xr","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T08:22:34.3Z","counter":"3","type":"ObjectCreationNotificationXml","objectId":"sim12600"}},"_id":"AXB7cMqbZ_FApnwi29xs","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T08:22:19.8Z","newValue":"connecting","attributeName":"ConnectionStatus","counter":"1","type":"AttributeValueChangedNotificationXml","objectId":"sim2230"}},"_id":"AXB7cJHlZ_FApnwi29xq","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T08:22:43.7Z","newValue":"connected","attributeName":"ConnectionStatus","counter":"5","type":"AttributeValueChangedNotificationXml","objectId":"sim12600"}},"_id":"AXB7cO9OZ_FApnwi29xu","_score":1},{"_index":"sdnevents_v1","_type":"eventlog","_source":{"event":{"nodeName":"SDN-Controller-465e2ae306ca","timeStamp":"2020-02-25T10:23:06.3Z","newValue":"connected","attributeName":"ConnectionStatus","counter":"7","type":"AttributeValueChangedNotificationXml","objectId":"sim12600"}},"_id":"AXB73yRWZ_FApnwi29x3","_score":1}],"inventory":[{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2013-10-21T00:00:00.0Z","modelIdentifier":"model-id-12","manufacturerIdentifier":"SAN","manufacturerName":null,"typeName":"p8.module","description":"WS/p8.module","uuid":"CARD-1.1.5.0","version":"234","parentUuid":"SHELF-1.1.0.0","mountpoint":"sim12600","containedHolder":["PORT-1.1.5.6","PORT-1.1.5.5","PORT-1.1.5.8","PORT-1.1.5.7"],"treeLevel":1,"partTypeId":"part-number-12","serial":"africa"},"_id":"sim12600/CARD-1.1.5.0","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2013-11-23T00:00:00.0Z","modelIdentifier":"model-id-12","manufacturerIdentifier":"SAN","manufacturerName":null,"typeName":"p8.module","description":"WS/p8.module","uuid":"CARD-1.1.6.0","version":"234","parentUuid":"SHELF-1.1.0.0","mountpoint":"sim12600","containedHolder":["PORT-1.1.6.5","PORT-1.1.6.7","PORT-1.1.6.6","PORT-1.1.6.8"],"treeLevel":1,"partTypeId":"part-number-12","serial":"serial-number-124"},"_id":"sim12600/CARD-1.1.6.0","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2013-04-13T00:00:00.0Z","modelIdentifier":"CRPQABVFAA","manufacturerIdentifier":"ONF-Wireless-Transport","manufacturerName":null,"typeName":"a2.module","description":"WS/p8.module/a2.module#5","uuid":"a2.module-1.1.6.5","version":"a2.module-newest","parentUuid":"CARD-1.1.6.0","mountpoint":"sim12600","containedHolder":["SUBRACK-1.65.0.0"],"treeLevel":2,"partTypeId":"3EM23141AD01","serial":"310330008"},"_id":"sim12600/a2.module-1.1.6.5","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2008-10-21T00:00:00.0Z","modelIdentifier":"model-id-s3s","manufacturerIdentifier":"ONF-Wireless-Transport","manufacturerName":null,"typeName":"p4.module","description":"WS/DS3","uuid":"CARD-1.1.8.0","version":"unknown","parentUuid":"SHELF-1.1.0.0","mountpoint":"sim12600","containedHolder":[],"treeLevel":1,"partTypeId":"unknown","serial":"sd-dsa-eqw"},"_id":"sim12600/CARD-1.1.8.0","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2007-02-19T00:00:00.0Z","modelIdentifier":"model-id-s3s","manufacturerIdentifier":"CIT","manufacturerName":null,"typeName":"wind","description":"WS/wind","uuid":"CARD-1.1.9.0","version":"wind","parentUuid":"SHELF-1.1.0.0","mountpoint":"sim12600","containedHolder":[],"treeLevel":1,"partTypeId":"party-yea","serial":"proto-type"},"_id":"sim12600/CARD-1.1.9.0","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2014-01-16T00:00:00.0Z","modelIdentifier":"model-id-s3s","manufacturerIdentifier":"ONF-Wireless-Transport","manufacturerName":null,"typeName":"MWR-ng","description":"MWR-ng Dir#6.5-Ch#1","uuid":"IDU-1.65.0.0","version":"MWR-ng","parentUuid":"network-element","mountpoint":"sim12600","containedHolder":["PORT-1.65.1.4","PORT-1.65.1.2"],"treeLevel":0,"partTypeId":"3DB76047BAAA02","serial":"WAUZZI"},"_id":"sim12600/IDU-1.65.0.0","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"","modelIdentifier":"","manufacturerIdentifier":"","manufacturerName":null,"typeName":"a2.module","description":"WS/p8.module/a2.module#6","uuid":"a2.module-1.1.5.6","version":"","parentUuid":"CARD-1.1.5.0","mountpoint":"sim12600","containedHolder":["SUBRACK-1.56.0.0"],"treeLevel":2,"partTypeId":"","serial":""},"_id":"sim12600/a2.module-1.1.5.6","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2013-04-13T00:00:00.0Z","modelIdentifier":"CRPQABVFAA","manufacturerIdentifier":"ONF-Wireless-Transport","manufacturerName":null,"typeName":"a2.module","description":"WS/p8.module/a2.module#5","uuid":"a2.module-1.1.5.5","version":"a2.module-newest","parentUuid":"CARD-1.1.5.0","mountpoint":"sim12600","containedHolder":["SUBRACK-1.55.0.0"],"treeLevel":2,"partTypeId":"3EM23141AD01","serial":"310330015"},"_id":"sim12600/a2.module-1.1.5.5","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2014-01-15T00:00:00.0Z","modelIdentifier":"model-id-s3s","manufacturerIdentifier":"ONF-Wireless-Transport","manufacturerName":null,"typeName":"MWR-ng","description":"MWR-ng Dir#5.5-Ch#1","uuid":"IDU-1.55.0.0","version":"MWR-ng","parentUuid":"network-element","mountpoint":"sim12600","containedHolder":["PORT-1.55.1.2","PORT-1.55.1.4"],"treeLevel":0,"partTypeId":"3DB76047BAAA02","serial":"Serie2017-14"},"_id":"sim12600/IDU-1.55.0.0","_score":1},{"_index":"sdnevents_v1","_type":"inventoryequipment","_source":{"date":"2014-01-07T00:00:00.0Z","modelIdentifier":"model-id-s3s","manufacturerIdentifier":"ONF-Wireless-Transport","manufacturerName":null,"typeName":"RxDiv","description":"MWR#55Ch#1/RxDiv","uuid":"CARD-1.55.1.4","version":"2017","parentUuid":"IDU-1.55.0.0","mountpoint":"sim12600","containedHolder":[],"treeLevel":1,"partTypeId":"partNo2017-12","serial":"Serie2017-12"},"_id":"sim12600/CARD-1.55.1.4","_score":1}],"historicalperformance24h":[{"_index":"sdnperformance_v1","_type":"historicalperformance24h","_source":{"time-stamp":"2017-03-01T00:00:00.0Z","node-name":"sim2230","uuid-interface":"LP-MWPS-TTP-RADIO","scanner-id":"PM_RADIO_24H_1","layer-protocol-name":"MWPS","granularity-period":"PERIOD_24HOURS","radio-signal-id":"Test8","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"time64-states":86400,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":86400,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"rx-level-min":-44,"rx-level-avg":-44,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-45,"defect-blocks-sum":-1,"time32-states":-1}},"_id":"sim2230/LP-MWPS-TTP-RADIO/2017-03-01T00:00:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance24h","_source":{"time-stamp":"2017-07-04T00:00:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-01","scanner-id":"PM_RADIO_24H_1","layer-protocol-name":"MWPS","granularity-period":"PERIOD_24HOURS","radio-signal-id":"Test11","suspect-interval-flag":true,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"time64-states":1,"unavailability":504,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":20,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":86400,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":2,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":2,"time256-states":38319,"rx-level-min":-41,"rx-level-avg":-41,"time1024-states-l":-1,"es":5,"cses":0,"time4-states-s":9,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-41,"defect-blocks-sum":-1,"time32-states":1}},"_id":"sim12600/LP-MWPS-TTP-01/2017-07-04T00:00:00.0+00:00","_score":1}],"maintenance":[{"_index":"mwtn_v1","_type":"maintenancemode","_source":{"filter":[{"start":"","description":"","definition":{"problem":"","object-id-ref":""},"end":""}],"node":"sim12600","active":false},"_id":"sim12600","_score":1},{"_index":"mwtn_v1","_type":"maintenancemode","_source":{"filter":[{"start":"","description":"","definition":{"problem":"","object-id-ref":""},"end":""}],"node":"sim2230","active":false},"_id":"sim2230","_score":1}],"historicalperformance15m":[{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T07:00:00.0Z","node-name":"sim2230","uuid-interface":"LP-MWPS-TTP-RADIO","scanner-id":"PM_RADIO_15M_13","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test8","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"time64-states":900,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"rx-level-min":-44,"rx-level-avg":-44,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-45,"defect-blocks-sum":-1,"time32-states":-1}},"_id":"sim2230/LP-MWPS-TTP-RADIO/2017-03-01T07:00:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T07:30:00.0Z","node-name":"sim2230","uuid-interface":"LP-MWPS-TTP-RADIO","scanner-id":"PM_RADIO_15M_11","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test8","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"time64-states":900,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"rx-level-min":-44,"rx-level-avg":-44,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-45,"defect-blocks-sum":-1,"time32-states":-1}},"_id":"sim2230/LP-MWPS-TTP-RADIO/2017-03-01T07:30:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T13:45:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-01","scanner-id":"PM_RADIO_15M_10","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test11","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"time64-states":0,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"rx-level-min":-41,"rx-level-avg":-41,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-41,"defect-blocks-sum":-1,"time32-states":0}},"_id":"sim12600/LP-MWPS-TTP-01/2017-07-04T13:45:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T12:30:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-01","scanner-id":"PM_RADIO_15M_15","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test11","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"time64-states":0,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"rx-level-min":-41,"rx-level-avg":-41,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-41,"defect-blocks-sum":-1,"time32-states":0}},"_id":"sim12600/LP-MWPS-TTP-01/2017-07-04T12:30:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T15:00:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-01","scanner-id":"PM_RADIO_15M_5","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test11","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"time64-states":0,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"rx-level-min":-41,"rx-level-avg":-41,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-41,"defect-blocks-sum":-1,"time32-states":0}},"_id":"sim12600/LP-MWPS-TTP-01/2017-07-04T15:00:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T16:00:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-02","scanner-id":"PM_RADIO_15M_01","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test12","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":11,"snir-max":-99,"time16-states":76,"time64-states":0,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":10,"tx-level-min":0,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":0,"rx-level-min":-62,"rx-level-avg":-62,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":267,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-62,"defect-blocks-sum":-1,"time32-states":557}},"_id":"sim12600/LP-MWPS-TTP-02/2017-07-04T16:00:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T14:00:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-02","scanner-id":"PM_RADIO_15M_8","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test12","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"time64-states":0,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"rx-level-min":-41,"rx-level-avg":-41,"time1024-states-l":-1,"es":1,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-40,"defect-blocks-sum":-1,"time32-states":0}},"_id":"sim12600/LP-MWPS-TTP-02/2017-07-04T14:00:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T14:15:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-02","scanner-id":"PM_RADIO_15M_7","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test12","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"time64-states":0,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"rx-level-min":-41,"rx-level-avg":-41,"time1024-states-l":-1,"es":2,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-40,"defect-blocks-sum":-1,"time32-states":0}},"_id":"sim12600/LP-MWPS-TTP-02/2017-07-04T14:15:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T12:15:00.0Z","node-name":"sim12600","uuid-interface":"LP-MWPS-TTP-02","scanner-id":"PM_RADIO_15M_15","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test12","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"time64-states":0,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"rx-level-min":-41,"rx-level-avg":-40,"time1024-states-l":-1,"es":3,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-40,"defect-blocks-sum":-1,"time32-states":0}},"_id":"sim12600/LP-MWPS-TTP-02/2017-07-04T12:15:00.0+00:00","_score":1},{"_index":"sdnperformance_v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T06:30:00.0Z","node-name":"sim2230","uuid-interface":"LP-MWPS-TTP-RADIO","scanner-id":"PM_RADIO_15M_15","layer-protocol-name":"MWPS","granularity-period":"PERIOD_15MIN","radio-signal-id":"Test8","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"time64-states":900,"unavailability":0,"time8192-states-l":-1,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"time2048-states":-1,"xpd-max":-99,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"rx-level-min":-44,"rx-level-avg":-44,"time1024-states-l":-1,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"rx-level-max":-45,"defect-blocks-sum":-1,"time32-states":-1}},"_id":"sim2230/LP-MWPS-TTP-RADIO/2017-03-01T06:30:00.0+00:00","_score":1}],"mediator-server":[]},"release":"el alto","created":"2020-02-25T12:57:32.4Z"} diff --git a/sdnr/wt/data-provider/setup/src/test/resources/test2.bak.json b/sdnr/wt/data-provider/setup/src/test/resources/test2.bak.json new file mode 100644 index 000000000..513d28d30 --- /dev/null +++ b/sdnr/wt/data-provider/setup/src/test/resources/test2.bak.json @@ -0,0 +1 @@ +{"configs":{},"components":{"required-networkelement":[{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"e13685991bfd_55005","is-required":false,"core-model-capability":"Unsupported","port":55005,"device-type":"ORAN","host":"10.20.5.5","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"id":"e13685991bfd_55005","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","status":"Connected"},"_id":"e13685991bfd_55005","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"e13685991bfd_55006","is-required":false,"core-model-capability":"Unsupported","port":55006,"device-type":"ORAN","host":"10.20.5.5","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"id":"e13685991bfd_55006","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","status":"Connected"},"_id":"e13685991bfd_55006","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"e13685991bfd_55008","is-required":false,"core-model-capability":"Unsupported","port":55008,"device-type":"ORAN","host":"10.20.5.5","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"id":"e13685991bfd_55008","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","status":"Connected"},"_id":"e13685991bfd_55008","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"e13685991bfd_55004","is-required":false,"core-model-capability":"Unsupported","port":55004,"device-type":"ORAN","host":"10.20.5.5","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"id":"e13685991bfd_55004","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","status":"Connected"},"_id":"e13685991bfd_55004","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"e13685991bfd_55001","is-required":false,"core-model-capability":"Unsupported","port":55001,"device-type":"ORAN","host":"10.20.5.5","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"id":"e13685991bfd_55001","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","status":"Connected"},"_id":"e13685991bfd_55001","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"robot_sim_2_equipment","is-required":true,"password":"admin","core-model-capability":"2017-03-20","port":2231,"host":"10.20.6.29","device-type":"Wireless","id":"robot_sim_2_equipment","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:notification:1.0","(urn:onf:params:xml:ns:yang:microwave-model?revision=2017-03-24)microwave-model","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:onf:params:xml:ns:yang:onf-ptp-dataset?revision=2017-05-08)onf-ptp-dataset","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2012-02-22)ietf-netconf-acm","(urn:onf:params:xml:ns:yang:onf-core-model-conditional-packages?revision=2017-04-02)onf-core-model-conditional-packages","(urn:onf:params:xml:ns:yang:core-model?revision=2017-03-20)core-model","(urn:onf:params:xml:ns:yang:g.874.1-model?revision=2017-03-20)g.874.1-model","(urn:ietf:params:xml:ns:yang:ietf-ptp-dataset?revision=2017-02-08)ietf-ptp-dataset","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2010-09-24)ietf-inet-types","(urn:ietf:params:xml:ns:netconf:partial-lock:1.0?revision=2009-10-19)ietf-netconf-partial-lock","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:onf:params:xml:ns:yang:onf-ethernet-conditional-packages?revision=2017-04-02)onf-ethernet-conditional-packages"],"unavailable-capabilities":["(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2010-09-24)ietf-yang-types","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults"],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","username":"admin","status":"Connected"},"_id":"robot_sim_2_equipment","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"Robot_NTS_Manager","is-required":true,"password":"netconf","core-model-capability":"Unsupported","port":8200,"host":"10.20.5.5","device-type":"NtsManager","id":"Robot_NTS_Manager","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=23","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","username":"netconf","status":"Connected"},"_id":"Robot_NTS_Manager","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"e13685991bfd_55002","is-required":false,"core-model-capability":"Unsupported","port":55002,"device-type":"ORAN","host":"10.20.5.5","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"id":"e13685991bfd_55002","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","status":"Connected"},"_id":"e13685991bfd_55002","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"robot_ntsim_1","is-required":true,"password":"netconf","core-model-capability":"Unsupported","port":55000,"host":"10.20.5.5","device-type":"ORAN","id":"robot_ntsim_1","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","username":"netconf","status":"Connected"},"_id":"robot_ntsim_1","_score":1},{"_index":"networkelement-connection-v1","_type":"networkelement-connection","_source":{"node-id":"e13685991bfd_55009","is-required":false,"core-model-capability":"Unsupported","port":55009,"device-type":"ORAN","host":"10.20.5.5","node-details":{"available-capabilities":["urn:ietf:params:netconf:base:1.0","urn:ietf:params:netconf:base:1.1","urn:ietf:params:netconf:capability:candidate:1.0","urn:ietf:params:netconf:capability:notification:1.0","urn:ietf:params:netconf:capability:rollback-on-error:1.0","urn:ietf:params:netconf:capability:xpath:1.0","urn:ietf:params:netconf:capability:startup:1.0","urn:ietf:params:netconf:capability:interleave:1.0","urn:ietf:params:netconf:capability:url:1.0","urn:ietf:params:netconf:capability:writable-running:1.0","urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=60","urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,explicit","urn:ietf:params:netconf:capability:validate:1.1","(urn:o-ran:alarms:1.0?revision=2019-02-04)o-ran-alarm-id","(urn:o-ran:sync:1.0?revision=2019-03-06)o-ran-sync","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-ip?revision=2018-02-22)ietf-ip","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:o-ran:ald-port:1.0?revision=2019-03-07)o-ran-ald-port","(urn:o-ran:supervision:1.0?revision=2019-04-11)o-ran-supervision","(urn:onf:params:xml:ns:yang:network-topology-simulator?revision=2019-10-25)network-topology-simulator","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:ietf:params:xml:ns:yang:iana-hardware?revision=2018-03-13)iana-hardware","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:ietf:params:xml:ns:yang:ietf-ssh-server?revision=2016-11-02)ietf-ssh-server","(urn:ietf:params:xml:ns:yang:ietf-netconf-acm?revision=2018-02-14)ietf-netconf-acm","(urn:o-ran:lbm:1.0?revision=2019-02-04)o-ran-lbm","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2017-01-19)iana-if-type","(urn:o-ran:compression-factors:1.0?revision=2019-06-19)o-ran-compression-factors","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware","(urn:o-ran:interfaces:1.0?revision=2019-03-28)o-ran-interfaces","(urn:o-ran:mplane-interfaces:1.0?revision=2019-04-11)o-ran-mplane-int","(urn:o-ran:uplane-conf:1.0?revision=2019-04-01)o-ran-uplane-conf","(urn:ietf:params:xml:ns:yang:ietf-tls-server?revision=2016-11-02)ietf-tls-server","(urn:o-ran:ald:1.0?revision=2019-03-07)o-ran-ald","(urn:ietf:params:xml:ns:yang:ietf-system?revision=2014-08-06)ietf-system","(urn:o-ran:external-io:1.0?revision=2019-03-07)o-ran-externalio","(urn:o-ran:fm:1.0?revision=2019-02-04)o-ran-fm","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:o-ran:message5:1.0?revision=2019-02-04)o-ran-ecpri-delay","(urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?revision=2011-06-01)ietf-netconf-with-defaults","(urn:ietf:params:xml:ns:yang:1?revision=2017-02-20)yang","(urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types?revision=2018-01-30)ietf-dhcpv6-types","(urn:ietf:params:xml:ns:yang:ietf-crypto-types?revision=2019-10-18)ietf-crypto-types","(urn:ietf:params:xml:ns:yang:ietf-datastores?revision=2017-08-17)ietf-datastores","(urn:ietf:params:xml:ns:yang:ietf-yang-metadata?revision=2016-08-05)ietf-yang-metadata","(urn:ietf:params:xml:ns:yang:ietf-netconf-server?revision=2016-11-02)ietf-netconf-server","(urn:o-ran:performance-management:1.0?revision=2019-06-05)o-ran-performance-management","(urn:o-ran:laa-operations:1.0?revision=2019-04-01)o-ran-laa-operations","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2019-01-04)ietf-yang-library","(urn:o-ran:operations:1.0?revision=2019-04-08)o-ran-operations","(urn:o-ran:dhcp:1.0?revision=2019-05-25)o-ran-dhcp","(urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?revision=2014-12-10)ietf-x509-cert-to-name","(urn:o-ran:software-management:1.0?revision=2019-06-05)o-ran-software-management","(urn:ietf:params:xml:ns:yang:ietf-hardware?revision=2018-03-13)ietf-hardware","(urn:o-ran:fan:1.0?revision=2019-03-06)o-ran-fan","(urn:o-ran:delay:1.0?revision=2019-06-03)o-ran-delay-management","(urn:o-ran:beamforming:1.0?revision=2019-06-19)o-ran-beamforming","(urn:o-ran:module-cap:1.0?revision=2019-02-04)o-ran-module-cap","(urn:o-ran:trace:1.0?revision=2019-02-21)o-ran-trace","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2018-02-20)ietf-interfaces","(urn:o-ran:troubleshooting:1.0?revision=2019-02-04)o-ran-troubleshooting","(urn:o-ran:user-mgmt:1.0?revision=2019-04-25)o-ran-usermgmt","(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2016-10-31)ietf-keystore","(urn:o-ran:processing-element:1.0?revision=2019-02-04)o-ran-processing-element","(urn:o-ran:laa:1.0?revision=2019-02-04)o-ran-laa","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:o-ran:file-management:1.0?revision=2019-06-05)o-ran-file-management","(urn:o-ran:transceiver:1.0?revision=2019-03-07)o-ran-transceiver","(urn:ietf:params:xml:ns:yang:iana-crypt-hash?revision=2014-08-06)iana-crypt-hash","(urn:o-ran:udpecho:1.0?revision=2019-02-04)o-ran-udp-echo"],"unavailable-capabilities":[],"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetails"},"id":"e13685991bfd_55009","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnection","status":"Connected"},"_id":"e13685991bfd_55009","_score":1}],"faultlog":[],"faultcurrent":[{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Warning","node-id":"robot_sim_2_equipment","problem":"unknownProblem2","counter":2,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"LP-MWS-TTP-02","timestamp":"2017-01-01T00:00:00.0Z"},"_id":"robot_sim_2_equipment/LP-MWS-TTP-02/unknownProblem2","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Minor","node-id":"robot_sim_2_equipment","problem":"BatteryBFail","counter":5,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"SHELF-1.1.0.0","timestamp":"2017-06-30T18:28:13.0Z"},"_id":"robot_sim_2_equipment/SHELF-1.1.0.0/BatteryBFail","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Warning","node-id":"robot_sim_2_equipment","problem":"unknownProblem2","counter":2,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"LP-MWS-TTP-01","timestamp":"2017-01-01T00:00:00.0Z"},"_id":"robot_sim_2_equipment/LP-MWS-TTP-01/unknownProblem2","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Major","node-id":"robot_sim_2_equipment","problem":"Ais","counter":50443,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"a2.module-1.1.5.6","timestamp":"2017-07-27T13:33:49.0Z"},"_id":"robot_sim_2_equipment/a2.module-1.1.5.6/Ais","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Major","node-id":"robot_sim_2_equipment","problem":"CableLOS","counter":50446,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"ODU-1.56.0.0","timestamp":"2017-07-27T13:38:55.0Z"},"_id":"robot_sim_2_equipment/ODU-1.56.0.0/CableLOS","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Critical","node-id":"robot_sim_1","problem":"rslIsExceeded","counter":2,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"LP-MWPS-TTP-RADIO","timestamp":"2017-01-01T00:00:00.0Z"},"_id":"robot_sim_1/LP-MWPS-TTP-RADIO/rslIsExceeded","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Critical","node-id":"robot_sim_2_equipment","problem":"unknownProblem1","counter":1,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"LP-MWS-TTP-02","timestamp":"2017-01-01T00:00:00.0+00:00"},"_id":"robot_sim_2_equipment/LP-MWS-TTP-02/unknownProblem1","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Critical","node-id":"robot_sim_2_equipment","problem":"signalIsLost","counter":2,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"LP-MWPS-TTP-01","timestamp":"2017-01-01T00:00:00.0Z"},"_id":"robot_sim_2_equipment/LP-MWPS-TTP-01/signalIsLost","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Critical","node-id":"robot_sim_2_equipment","problem":"unknownProblem1","counter":1,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"LP-MWS-TTP-01","timestamp":"2017-01-01T00:00:00.0+00:00"},"_id":"robot_sim_2_equipment/LP-MWS-TTP-01/unknownProblem1","_score":1},{"_index":"faultcurrent-v1","_type":"faultcurrent","_source":{"severity":"Critical","node-id":"robot_sim_2_equipment","problem":"signalIsLost","counter":2,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent","object-id":"LP-MWPS-TTP-02","timestamp":"2017-01-01T00:00:00.0Z"},"_id":"robot_sim_2_equipment/LP-MWPS-TTP-02/signalIsLost","_score":1}],"eventlog":[{"_index":"eventlog-v1","_type":"eventlog","_source":{"node-id":"SDN-Controller-0","attribute-name":"startup","source-type":"Controller","counter":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Eventlog","object-id":"DeviceManager","new-value":"done","timestamp":"2020-02-25T08:00:15.2Z"},"_id":"Eo1ce3ABrQpvHi5aXFdl","_score":1},{"_index":"eventlog-v1","_type":"eventlog","_source":{"node-id":"SDN-Controller-0","attribute-name":"startup","source-type":"Controller","counter":1,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Eventlog","object-id":"DeviceManagerGRan","new-value":"done","timestamp":"2020-02-25T08:00:15.9Z"},"_id":"E41ce3ABrQpvHi5aXld9","_score":1},{"_index":"eventlog-v1","_type":"eventlog","_source":{"node-id":"SDN-Controller-0","attribute-name":"startup","source-type":"Controller","counter":3,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Eventlog","object-id":"DeviceManagerORan","new-value":"done","timestamp":"2020-02-25T08:00:16.1Z"},"_id":"FY1ce3ABrQpvHi5aX1cZ","_score":1},{"_index":"eventlog-v1","_type":"eventlog","_source":{"node-id":"SDN-Controller-0","attribute-name":"startup","source-type":"Controller","counter":2,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Eventlog","object-id":"DeviceManagerOnf","new-value":"done","timestamp":"2020-02-25T08:00:15.9Z"},"_id":"FI1ce3ABrQpvHi5aXleF","_score":1}],"inventory":[{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2005-11-09T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"3FE25774AA01","manufacturer-identifier":"ONF-Wireless-Transport","description":"WS/CORE-MAIN/a2.module#5","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"a2.module-newest","tree-level":2,"uuid":"a2.module-1.1.1.5","model-identifier":"VAUIAEYAAA","type-name":"a2.module","contained-holder":["SUBRACK-1.15.0.0"],"serial":"0003548168","parent-uuid":"CARD-1.1.1.0"},"_id":"robot_sim_2_equipment/a2.module-1.1.1.5","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2013-11-23T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"part-number-12","manufacturer-identifier":"SAN","description":"WS/p8.module","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"234","tree-level":1,"uuid":"CARD-1.1.6.0","model-identifier":"model-id-12","type-name":"p8.module","contained-holder":["PORT-1.1.6.5","PORT-1.1.6.7","PORT-1.1.6.6","PORT-1.1.6.8"],"serial":"serial-number-124","parent-uuid":"SHELF-1.1.0.0"},"_id":"robot_sim_2_equipment/CARD-1.1.6.0","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2013-04-13T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"3EM23141AD01","manufacturer-identifier":"ONF-Wireless-Transport","description":"WS/p8.module/a2.module#5","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"a2.module-newest","tree-level":2,"uuid":"a2.module-1.1.6.5","model-identifier":"CRPQABVFAA","type-name":"a2.module","contained-holder":["SUBRACK-1.65.0.0"],"serial":"310330008","parent-uuid":"CARD-1.1.6.0"},"_id":"robot_sim_2_equipment/a2.module-1.1.6.5","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2014-01-07T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"partNo2017-12","manufacturer-identifier":"ONF-Wireless-Transport","description":"MWR#55Ch#1/RxDiv","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"2017","tree-level":1,"uuid":"CARD-1.55.1.4","model-identifier":"model-id-s3s","type-name":"RxDiv","contained-holder":[],"serial":"Serie2017-12","parent-uuid":"IDU-1.55.0.0"},"_id":"robot_sim_2_equipment/CARD-1.55.1.4","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2017-09-09T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"Partnumber","manufacturer-identifier":"ONF-Wireless-Transport","description":"MWR#56Ch#1/a2.moduletraff","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"a2.module-newest","tree-level":1,"uuid":"a2.module-1.56.1.2","model-identifier":"model-id","type-name":"a2.module","contained-holder":[],"serial":"Serial1","parent-uuid":"ODU-1.56.0.0"},"_id":"robot_sim_2_equipment/a2.module-1.56.1.2","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2015-08-17T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"part-number-2","manufacturer-identifier":"SAN","description":"WS/CORE-MAIN","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"123","tree-level":1,"uuid":"CARD-1.1.1.0","model-identifier":"model-id-2","type-name":"latest","contained-holder":["PORT-1.1.1.6","PORT-1.1.1.5","PORT-1.1.1.8","PORT-1.1.1.7"],"serial":"asdf-asdasd-asd","parent-uuid":"SHELF-1.1.0.0"},"_id":"robot_sim_2_equipment/CARD-1.1.1.0","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2010-02-05T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"1AB376720002","manufacturer-identifier":"ONF-Wireless-Transport","description":"WS/CORE-MAIN/a2.module#8","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"a2.module-newest","tree-level":2,"uuid":"a2.module-1.1.1.8","model-identifier":"NGI7AMLMAA","type-name":"a2.module","contained-holder":["SUBRACK-1.18.0.0"],"serial":"01T441601301","parent-uuid":"CARD-1.1.1.0"},"_id":"robot_sim_2_equipment/a2.module-1.1.1.8","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2013-10-21T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"part-number-12","manufacturer-identifier":"SAN","description":"WS/p8.module","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"234","tree-level":1,"uuid":"CARD-1.1.5.0","model-identifier":"model-id-12","type-name":"p8.module","contained-holder":["PORT-1.1.5.6","PORT-1.1.5.5","PORT-1.1.5.8","PORT-1.1.5.7"],"serial":"africa","parent-uuid":"SHELF-1.1.0.0"},"_id":"robot_sim_2_equipment/CARD-1.1.5.0","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"node-id":"robot_sim_2_equipment","part-type-id":"","manufacturer-identifier":"","description":"WS/p8.module/a2.module#6","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"","tree-level":2,"uuid":"a2.module-1.1.5.6","model-identifier":"","type-name":"a2.module","contained-holder":["SUBRACK-1.56.0.0"],"serial":"","parent-uuid":"CARD-1.1.5.0"},"_id":"robot_sim_2_equipment/a2.module-1.1.5.6","_score":1},{"_index":"inventoryequipment-v1","_type":"inventoryequipment","_source":{"date":"2014-01-16T00:00:00.0Z","node-id":"robot_sim_2_equipment","part-type-id":"3DB76047BAAA02","manufacturer-identifier":"ONF-Wireless-Transport","description":"MWR-ng Dir#6.5-Ch#1","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory","version":"MWR-ng","tree-level":0,"uuid":"IDU-1.65.0.0","model-identifier":"model-id-s3s","type-name":"MWR-ng","contained-holder":["PORT-1.65.1.4","PORT-1.65.1.2"],"serial":"WAUZZI","parent-uuid":"network-element"},"_id":"robot_sim_2_equipment/IDU-1.65.0.0","_score":1}],"historicalperformance24h":[{"_index":"historicalperformance24h-v1","_type":"historicalperformance24h","_source":{"time-stamp":"2017-07-04T00:00:00.0+00:00","node-name":"robot_sim_2_equipment","scanner-id":"PM_RADIO_24H_1","uuid-interface":"LP-MWPS-TTP-01","layer-protocol-name":"MWPS","granularity-period":"Period24Hours","radio-signal-id":"Test11","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":true,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":1,"time8192-states-l":-1,"unavailability":504,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":20,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":86400,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":2,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":2,"time256-states":38319,"time1024-states-l":-1,"rx-level-min":-41,"rx-level-avg":-41,"es":5,"cses":0,"time4-states-s":9,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-41,"time32-states":1}},"_id":"robot_sim_2_equipment/LP-MWPS-TTP-01/2017-07-04T00:00:00.0+00:00","_score":1},{"_index":"historicalperformance24h-v1","_type":"historicalperformance24h","_source":{"time-stamp":"2017-03-01T00:00:00.0+00:00","node-name":"robot_sim_1","scanner-id":"PM_RADIO_24H_1","uuid-interface":"LP-MWPS-TTP-RADIO","layer-protocol-name":"MWPS","granularity-period":"Period24Hours","radio-signal-id":"Test8","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":86400,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":86400,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"time1024-states-l":-1,"rx-level-min":-44,"rx-level-avg":-44,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-45,"time32-states":-1}},"_id":"robot_sim_1/LP-MWPS-TTP-RADIO/2017-03-01T00:00:00.0+00:00","_score":1}],"maintenance":[{"_index":"maintenancemode-v1","_type":"maintenancemode","_source":{"node-id":"robot_sim_2_equipment","problem":"","object-id-ref":"","start":"2020-02-25T08:01:57.2Z","description":"","active":false,"end":"2020-02-25T08:01:57.2Z","id":"robot_sim_2_equipment","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Maintenance"},"_id":"robot_sim_2_equipment","_score":1},{"_index":"maintenancemode-v1","_type":"maintenancemode","_source":{"node-id":"robot_sim_1","problem":"","object-id-ref":"","start":"2020-02-25T08:01:43.0Z","description":"","active":false,"end":"2020-02-25T08:01:43.0Z","id":"robot_sim_1","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Maintenance"},"_id":"robot_sim_1","_score":1}],"historicalperformance15m":[{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T12:00:00.0+00:00","node-name":"robot_sim_2_equipment","scanner-id":"PM_RADIO_15M_16","uuid-interface":"LP-MWPS-TTP-02","layer-protocol-name":"MWPS","granularity-period":"Period15Min","radio-signal-id":"Test12","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":0,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"time1024-states-l":-1,"rx-level-min":-41,"rx-level-avg":-40,"es":3,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-40,"time32-states":0}},"_id":"robot_sim_2_equipment/LP-MWPS-TTP-02/2017-07-04T12:00:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T13:45:00.0+00:00","node-name":"robot_sim_2_equipment","scanner-id":"PM_RADIO_15M_10","uuid-interface":"LP-MWPS-TTP-01","layer-protocol-name":"MWPS","granularity-period":"Period15Min","radio-signal-id":"Test11","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":0,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"time1024-states-l":-1,"rx-level-min":-41,"rx-level-avg":-41,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-41,"time32-states":0}},"_id":"robot_sim_2_equipment/LP-MWPS-TTP-01/2017-07-04T13:45:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-07-04T15:15:00.0+00:00","node-name":"robot_sim_2_equipment","scanner-id":"PM_RADIO_15M_4","uuid-interface":"LP-MWPS-TTP-01","layer-protocol-name":"MWPS","granularity-period":"Period15Min","radio-signal-id":"Test11","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":25,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":0,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":25,"tx-level-min":25,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":-1,"time4-states":0,"time8-states":0,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":0,"time256-states":900,"time1024-states-l":-1,"rx-level-min":-41,"rx-level-avg":-41,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-41,"time32-states":0}},"_id":"robot_sim_2_equipment/LP-MWPS-TTP-01/2017-07-04T15:15:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T06:15:00.0+00:00","node-name":"robot_sim_1","scanner-id":"PM_RADIO_15M_16","uuid-interface":"LP-MWPS-TTP-RADIO","layer-protocol-name":"MWPS","granularity-period":"Period15Min","radio-signal-id":"Test8","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":900,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"time1024-states-l":-1,"rx-level-min":-44,"rx-level-avg":-44,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-45,"time32-states":-1}},"_id":"robot_sim_1/LP-MWPS-TTP-RADIO/2017-03-01T06:15:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T06:30:00.0+00:00","node-name":"robot_sim_1","scanner-id":"PM_RADIO_15M_15","uuid-interface":"LP-MWPS-TTP-RADIO","layer-protocol-name":"MWPS","granularity-period":"Period15Min","radio-signal-id":"Test8","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":900,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"time1024-states-l":-1,"rx-level-min":-44,"rx-level-avg":-44,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-45,"time32-states":-1}},"_id":"robot_sim_1/LP-MWPS-TTP-RADIO/2017-03-01T06:30:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T08:30:00.0+00:00","node-name":"robot_sim_1","scanner-id":"PM_RADIO_15M_7","uuid-interface":"LP-MWPS-TTP-RADIO","layer-protocol-name":"MWPS","granularity-period":"Period15Min","radio-signal-id":"Test8","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":900,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"time1024-states-l":-1,"rx-level-min":-44,"rx-level-avg":-44,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-45,"time32-states":-1}},"_id":"robot_sim_1/LP-MWPS-TTP-RADIO/2017-03-01T08:30:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T09:15:00.0+00:00","node-name":"robot_sim_1","scanner-id":"PM_RADIO_15M_4","uuid-interface":"LP-MWPS-TTP-RADIO","layer-protocol-name":"MWPS","granularity-period":"Period15Min","radio-signal-id":"Test8","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"time4096-states-l":-1,"time16-states-s":-1,"tx-level-max":3,"snir-max":-99,"time16-states":0,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","time64-states":900,"time8192-states-l":-1,"unavailability":0,"time512-states":-1,"xpd-min":-99,"xpd-avg":-99,"tx-level-avg":3,"tx-level-min":3,"rf-temp-min":-99,"rf-temp-avg":-99,"snir-avg":-99,"snir-min":-99,"time-period":900,"time2-states":0,"time4-states":0,"time8-states":-1,"ses":0,"time2048-states-l":-1,"xpd-max":-99,"time2048-states":-1,"rf-temp-max":-99,"time8192-states":-1,"time128-states":-1,"time256-states":-1,"time1024-states-l":-1,"rx-level-min":-44,"rx-level-avg":-44,"es":0,"cses":0,"time4-states-s":0,"time1024-states":-1,"time512-states-l":-1,"time4096-states":-1,"defect-blocks-sum":-1,"rx-level-max":-45,"time32-states":-1}},"_id":"robot_sim_1/LP-MWPS-TTP-RADIO/2017-03-01T09:15:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T09:15:00.0+00:00","node-name":"robot_sim_2_equipment","scanner-id":"PM_ETH_CONTAINER_RADIO_15M_008","uuid-interface":"LP-ETH-CTP-01","layer-protocol-name":"ETH","granularity-period":"Period15Min","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"tx-ethernet-bytes-max-s":-1,"time-period":900,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","tx-ethernet-bytes-max-m":-1,"tx-ethernet-bytes-sum":0}},"_id":"robot_sim_2_equipment/LP-ETH-CTP-01/2017-03-01T09:15:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T09:00:00.0+00:00","node-name":"robot_sim_2_equipment","scanner-id":"PM_ETH_CONTAINER_RADIO_15M_007","uuid-interface":"LP-ETH-CTP-01","layer-protocol-name":"ETH","granularity-period":"Period15Min","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":false,"performance-data":{"tx-ethernet-bytes-max-s":-1,"time-period":900,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","tx-ethernet-bytes-max-m":-1,"tx-ethernet-bytes-sum":0}},"_id":"robot_sim_2_equipment/LP-ETH-CTP-01/2017-03-01T09:00:00.0+00:00","_score":1},{"_index":"historicalperformance15min-v1","_type":"historicalperformance15min","_source":{"time-stamp":"2017-03-01T07:30:00.0+00:00","node-name":"robot_sim_1","scanner-id":"PM_ETH_CONTAINER_RADIO_15M_001","uuid-interface":"LP-ETH-CTP-ETH-CONTAINER","layer-protocol-name":"ETH","granularity-period":"Period15Min","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity","suspect-interval-flag":true,"performance-data":{"tx-ethernet-bytes-max-s":-1,"time-period":900,"implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceData","tx-ethernet-bytes-max-m":-1,"tx-ethernet-bytes-sum":0}},"_id":"robot_sim_1/LP-ETH-CTP-ETH-CONTAINER/2017-03-01T07:30:00.0+00:00","_score":1}],"mediator-server":[],"connectionlog":[{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"e13685991bfd_55004","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:48.7Z","status":"Connected"},"_id":"Go1de3ABrQpvHi5ayley","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"e13685991bfd_55005","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:48.8Z","status":"Connected"},"_id":"G41de3ABrQpvHi5aylfG","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"e13685991bfd_55003","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:48.7Z","status":"Connected"},"_id":"HI1de3ABrQpvHi5aylfR","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"robot_sim_2_equipment","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:57.4Z","status":"Mounted"},"_id":"Io1de3ABrQpvHi5a61dF","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"e13685991bfd_55009","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:58.8Z","status":"Connected"},"_id":"JY1de3ABrQpvHi5a8FfF","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"robot_sim_1","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:43.2Z","status":"Mounted"},"_id":"GI1de3ABrQpvHi5atFdZ","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"robot_ntsim_1","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:48.9Z","status":"Connected"},"_id":"HY1de3ABrQpvHi5ay1cd","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"e13685991bfd_55000","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:49.1Z","status":"Connected"},"_id":"II1de3ABrQpvHi5ay1eR","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"e13685991bfd_55001","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:49.1Z","status":"Connected"},"_id":"IY1de3ABrQpvHi5ay1e9","_score":1},{"_index":"connectionlog-v1","_type":"connectionlog","_source":{"node-id":"e13685991bfd_55007","implemented-interface":"org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Connectionlog","timestamp":"2020-02-25T08:01:58.7Z","status":"Connected"},"_id":"I41de3ABrQpvHi5a8Fdp","_score":1}]},"release":"frankfurt-R1","created":"2020-02-25T14:17:04.6Z"} diff --git a/sdnr/wt/featureaggregator/installer/pom.xml b/sdnr/wt/featureaggregator/installer/pom.xml index 2109a4089..b993ad7ad 100755 --- a/sdnr/wt/featureaggregator/installer/pom.xml +++ b/sdnr/wt/featureaggregator/installer/pom.xml @@ -145,6 +145,30 @@ </execution> </executions> </plugin> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <version>2.6</version> + <executions> + <execution> + <id>copy-sdnr-data-migration-tool</id> + <goals> + <goal>copy-resources</goal> + </goals> + <phase>validate</phase> + <configuration> + <outputDirectory>${project.build.directory}/assembly/system/org/onap/ccsdk/features/sdnr/wt/sdnr-wt-data-provider-setup/${project.version}</outputDirectory> + <resources> + <resource> + <directory>${basedir}/../../data-provider/setup/target</directory> + <includes> + <include>sdnr-dmt.jar</include> + </includes> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> </project> |