Support for symptomdata collection 85/5785/1
authorMohamed Abukar <abukar.mohamed@nokia.com>
Mon, 22 Mar 2021 07:44:05 +0000 (09:44 +0200)
committerMohamed Abukar <abukar.mohamed@nokia.com>
Mon, 22 Mar 2021 07:47:56 +0000 (09:47 +0200)
Change-Id: I6887efe008c0f02e7fb0d66c4666c96761f82202
Signed-off-by: Mohamed Abukar <abukar.mohamed@nokia.com>
E2Manager/app/main.go [changed mode: 0644->0755]
E2Manager/container-tag.yaml
E2Manager/controllers/symptomdata_controller.go [new file with mode: 0755]
E2Manager/httpserver/http_server.go [changed mode: 0644->0755]
E2Manager/httpserver/http_server_test.go [changed mode: 0644->0755]
E2Manager/mocks/e2t_symptomdata_mock.go [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
index fa71c78..4708b05
@@ -123,5 +123,6 @@ func main() {
        rootController := controllers.NewRootController(rnibDataService)
        nodebController := controllers.NewNodebController(logger, httpMsgHandlerProvider)
        e2tController := controllers.NewE2TController(logger, httpMsgHandlerProvider)
-       _ = httpserver.Run(logger, config.Http.Port, rootController, nodebController, e2tController)
+       symptomController := controllers.NewSymptomdataController(logger, httpMsgHandlerProvider, rnibDataService, ranListManager)
+       _ = httpserver.Run(logger, config.Http.Port, rootController, nodebController, e2tController, symptomController)
 }
index d21ca0d..d84e8e8 100644 (file)
@@ -1,4 +1,4 @@
 # The Jenkins job requires a tag to build the Docker image.
 # Global-JJB script assumes this file is in the repo root.
 ---
-tag: 5.4.16
+tag: 5.4.17
diff --git a/E2Manager/controllers/symptomdata_controller.go b/E2Manager/controllers/symptomdata_controller.go
new file mode 100755 (executable)
index 0000000..e3f7dd1
--- /dev/null
@@ -0,0 +1,94 @@
+//
+// Copyright 2019 AT&T Intellectual Property
+// Copyright 2019 Nokia
+// Copyright (c) 2020 Samsung Electronics Co., Ltd. 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.
+
+//  This source code is part of the near-RT RIC (RAN Intelligent Controller)
+//  platform project (RICP).
+
+package controllers
+
+import (
+       "e2mgr/logger"
+       "e2mgr/managers"
+       "e2mgr/models"
+       "e2mgr/providers/httpmsghandlerprovider"
+       "e2mgr/services"
+       "encoding/json"
+       "net/http"
+
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+)
+
+type ISymptomdataController interface {
+       GetSymptomData(writer http.ResponseWriter, r *http.Request)
+}
+
+type SymptomdataController struct {
+       logger          *logger.Logger
+       handlerProvider *httpmsghandlerprovider.IncomingRequestHandlerProvider
+       rNibDataService services.RNibDataService
+       ranListManager  managers.RanListManager
+}
+
+func NewSymptomdataController(l *logger.Logger, hp *httpmsghandlerprovider.IncomingRequestHandlerProvider, rnib services.RNibDataService, rl managers.RanListManager) *SymptomdataController {
+       return &SymptomdataController{
+               logger:          l,
+               handlerProvider: hp,
+               rNibDataService: rnib,
+               ranListManager:  rl,
+       }
+}
+
+func (s *SymptomdataController) GetSymptomData(w http.ResponseWriter, r *http.Request) {
+       e2TList := s.handleRequest(httpmsghandlerprovider.GetE2TInstancesRequest)
+       nodeBList := s.ranListManager.GetNbIdentityList()
+
+       s.logger.Infof("nodeBList=%+v, e2TList=%+v", nodeBList, e2TList)
+
+       var NodebInfoList []entities.NodebInfo
+       for _, v := range nodeBList {
+               if n, err := s.rNibDataService.GetNodeb(v.InventoryName); err == nil {
+                       NodebInfoList = append(NodebInfoList, *n)
+               }
+       }
+       s.logger.Infof("NodebInfoList=%+v", NodebInfoList)
+
+       symptomdata := struct {
+               E2TList       models.IResponse       `json:"e2TList"`
+               NodeBList     []*entities.NbIdentity `json:"nodeBList"`
+               NodebInfoList []entities.NodebInfo   `json:"nodeBInfo"`
+       }{
+               e2TList,
+               nodeBList,
+               NodebInfoList,
+       }
+
+       w.Header().Set("Content-Type", "application/json")
+       w.Header().Set("Content-Disposition", "attachment; filename=platform/e2_info.json")
+       w.WriteHeader(http.StatusOK)
+       resp, _ := json.MarshalIndent(symptomdata, "", "    ")
+       w.Write(resp)
+}
+
+func (s *SymptomdataController) handleRequest(requestName httpmsghandlerprovider.IncomingRequest) models.IResponse {
+       handler, err := s.handlerProvider.GetHandler(requestName)
+       if err != nil {
+               return nil
+       }
+
+       resp, err := handler.Handle(nil)
+       return resp
+}
old mode 100644 (file)
new mode 100755 (executable)
index 1109f6e..3d5372b
@@ -28,10 +28,10 @@ import (
        "net/http"
 )
 
-func Run(log *logger.Logger, port int, rootController controllers.IRootController, nodebController controllers.INodebController, e2tController controllers.IE2TController) error {
+func Run(log *logger.Logger, port int, rootController controllers.IRootController, nodebController controllers.INodebController, e2tController controllers.IE2TController, symptomdataController controllers.ISymptomdataController) error {
 
        router := mux.NewRouter()
-       initializeRoutes(router, rootController, nodebController, e2tController)
+       initializeRoutes(router, rootController, nodebController, e2tController, symptomdataController)
 
        addr := fmt.Sprintf(":%d", port)
 
@@ -41,7 +41,7 @@ func Run(log *logger.Logger, port int, rootController controllers.IRootControlle
        return err
 }
 
-func initializeRoutes(router *mux.Router, rootController controllers.IRootController, nodebController controllers.INodebController, e2tController controllers.IE2TController) {
+func initializeRoutes(router *mux.Router, rootController controllers.IRootController, nodebController controllers.INodebController, e2tController controllers.IE2TController, symptomdataController controllers.ISymptomdataController) {
        r := router.PathPrefix("/v1").Subrouter()
        r.HandleFunc("/health", rootController.HandleHealthCheckRequest).Methods(http.MethodGet)
 
@@ -58,4 +58,6 @@ func initializeRoutes(router *mux.Router, rootController controllers.IRootContro
        rr.HandleFunc("/health", nodebController.HealthCheckRequest).Methods(http.MethodPut)
        rrr := r.PathPrefix("/e2t").Subrouter()
        rrr.HandleFunc("/list", e2tController.GetE2TInstances).Methods(http.MethodGet)
+
+       r.HandleFunc("/symptomdata", symptomdataController.GetSymptomData).Methods(http.MethodGet)
 }
old mode 100644 (file)
new mode 100755 (executable)
index f39a259..bbbdb14
@@ -31,7 +31,7 @@ import (
        "time"
 )
 
-func setupRouterAndMocks() (*mux.Router, *mocks.RootControllerMock, *mocks.NodebControllerMock, *mocks.E2TControllerMock) {
+func setupRouterAndMocks() (*mux.Router, *mocks.RootControllerMock, *mocks.NodebControllerMock, *mocks.E2TControllerMock, *mocks.SymptomdataControllerMock) {
        rootControllerMock := &mocks.RootControllerMock{}
        rootControllerMock.On("HandleHealthCheckRequest").Return(nil)
 
@@ -47,16 +47,18 @@ func setupRouterAndMocks() (*mux.Router, *mocks.RootControllerMock, *mocks.Nodeb
        nodebControllerMock.On("HealthCheckRequest").Return(nil)
 
        e2tControllerMock := &mocks.E2TControllerMock{}
-
        e2tControllerMock.On("GetE2TInstances").Return(nil)
 
+       symptomdataControllerMock := &mocks.SymptomdataControllerMock{}
+       symptomdataControllerMock.On("GetSymptomData").Return(nil)
+
        router := mux.NewRouter()
-       initializeRoutes(router, rootControllerMock, nodebControllerMock, e2tControllerMock)
-       return router, rootControllerMock, nodebControllerMock, e2tControllerMock
+       initializeRoutes(router, rootControllerMock, nodebControllerMock, e2tControllerMock, symptomdataControllerMock)
+       return router, rootControllerMock, nodebControllerMock, e2tControllerMock, symptomdataControllerMock
 }
 
 func TestRouteGetNodebIdList(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("GET", "/v1/nodeb/states", nil)
        if err != nil {
@@ -69,7 +71,7 @@ func TestRouteGetNodebIdList(t *testing.T) {
 }
 
 func TestRouteGetNodebId(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("GET", "/v1/nodeb/states/ran1", nil)
        if err != nil {
@@ -83,7 +85,7 @@ func TestRouteGetNodebId(t *testing.T) {
 }
 
 func TestRouteGetNodebRanName(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("GET", "/v1/nodeb/ran1", nil)
        if err != nil {
@@ -98,7 +100,7 @@ func TestRouteGetNodebRanName(t *testing.T) {
 }
 
 func TestRouteGetHealth(t *testing.T) {
-       router, rootControllerMock, _, _ := setupRouterAndMocks()
+       router, rootControllerMock, _, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("GET", "/v1/health", nil)
        if err != nil {
@@ -111,7 +113,7 @@ func TestRouteGetHealth(t *testing.T) {
 }
 
 func TestRoutePutNodebShutdown(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("PUT", "/v1/nodeb/shutdown", nil)
        if err != nil {
@@ -124,7 +126,7 @@ func TestRoutePutNodebShutdown(t *testing.T) {
 }
 
 func TestHealthCheckRequest(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("PUT", "/v1/nodeb/health", nil)
        if err != nil {
@@ -138,7 +140,7 @@ func TestHealthCheckRequest(t *testing.T) {
 }
 
 func TestRoutePutNodebSetGeneralConfiguration(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("PUT", "/v1/nodeb/parameters", nil)
        if err != nil {
@@ -151,7 +153,7 @@ func TestRoutePutNodebSetGeneralConfiguration(t *testing.T) {
 }
 
 func TestRoutePutUpdateEnb(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("PUT", "/v1/nodeb/enb/ran1", nil)
        if err != nil {
@@ -164,7 +166,7 @@ func TestRoutePutUpdateEnb(t *testing.T) {
 }
 
 func TestRouteNotFound(t *testing.T) {
-       router, _, _, _ := setupRouterAndMocks()
+       router, _, _, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("GET", "/v1/no/such/route", nil)
        if err != nil {
@@ -178,14 +180,14 @@ func TestRouteNotFound(t *testing.T) {
 
 func TestRunError(t *testing.T) {
        log := initLog(t)
-       err := Run(log, 1234567, &mocks.RootControllerMock{}, &mocks.NodebControllerMock{}, &mocks.E2TControllerMock{})
+       err := Run(log, 1234567, &mocks.RootControllerMock{}, &mocks.NodebControllerMock{}, &mocks.E2TControllerMock{}, &mocks.SymptomdataControllerMock{})
        assert.NotNil(t, err)
 }
 
 func TestRun(t *testing.T) {
        log := initLog(t)
-       _, rootControllerMock, nodebControllerMock, e2tControllerMock := setupRouterAndMocks()
-       go Run(log, 11223, rootControllerMock, nodebControllerMock, e2tControllerMock)
+       _, rootControllerMock, nodebControllerMock, e2tControllerMock, symptomdataControllerMock := setupRouterAndMocks()
+       go Run(log, 11223, rootControllerMock, nodebControllerMock, e2tControllerMock, symptomdataControllerMock)
 
        time.Sleep(time.Millisecond * 100)
        resp, err := http.Get("http://localhost:11223/v1/health")
@@ -196,7 +198,7 @@ func TestRun(t *testing.T) {
 }
 
 func TestRouteAddEnb(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("POST", "/v1/nodeb/enb", nil)
        if err != nil {
@@ -210,7 +212,7 @@ func TestRouteAddEnb(t *testing.T) {
 }
 
 func TestRouteDeleteEnb(t *testing.T) {
-       router, _, nodebControllerMock, _ := setupRouterAndMocks()
+       router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
 
        req, err := http.NewRequest("DELETE", "/v1/nodeb/enb/ran1", nil)
        if err != nil {
diff --git a/E2Manager/mocks/e2t_symptomdata_mock.go b/E2Manager/mocks/e2t_symptomdata_mock.go
new file mode 100755 (executable)
index 0000000..4f3162b
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// Copyright 2019 AT&T Intellectual Property
+// Copyright 2019 Nokia
+//
+// 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.
+//
+
+//  This source code is part of the near-RT RIC (RAN Intelligent Controller)
+//  platform project (RICP).
+
+package mocks
+
+import (
+       "github.com/stretchr/testify/mock"
+       "net/http"
+)
+
+type SymptomdataControllerMock struct {
+       mock.Mock
+}
+
+func (m *SymptomdataControllerMock) GetSymptomData(writer http.ResponseWriter, request *http.Request) {
+       m.Called()
+}