--- /dev/null
+//
+// 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
+}
"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)
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)
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)
}
"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)
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 {
}
func TestRouteGetNodebId(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("GET", "/v1/nodeb/states/ran1", nil)
if err != nil {
}
func TestRouteGetNodebRanName(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("GET", "/v1/nodeb/ran1", nil)
if err != nil {
}
func TestRouteGetHealth(t *testing.T) {
- router, rootControllerMock, _, _ := setupRouterAndMocks()
+ router, rootControllerMock, _, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("GET", "/v1/health", nil)
if err != nil {
}
func TestRoutePutNodebShutdown(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("PUT", "/v1/nodeb/shutdown", nil)
if err != nil {
}
func TestHealthCheckRequest(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("PUT", "/v1/nodeb/health", nil)
if err != nil {
}
func TestRoutePutNodebSetGeneralConfiguration(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("PUT", "/v1/nodeb/parameters", nil)
if err != nil {
}
func TestRoutePutUpdateEnb(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("PUT", "/v1/nodeb/enb/ran1", nil)
if err != nil {
}
func TestRouteNotFound(t *testing.T) {
- router, _, _, _ := setupRouterAndMocks()
+ router, _, _, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("GET", "/v1/no/such/route", nil)
if err != nil {
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")
}
func TestRouteAddEnb(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("POST", "/v1/nodeb/enb", nil)
if err != nil {
}
func TestRouteDeleteEnb(t *testing.T) {
- router, _, nodebControllerMock, _ := setupRouterAndMocks()
+ router, _, nodebControllerMock, _, _ := setupRouterAndMocks()
req, err := http.NewRequest("DELETE", "/v1/nodeb/enb/ran1", nil)
if err != nil {