+++ /dev/null
-/*
- * Copyright (c) 2019 AT&T Intellectual Property.
- * Copyright (c) 2018-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 main
-
-import (
- "fmt"
- "io/ioutil"
- "net"
- "net/http"
-)
-
-// SupervisionURL is the url where kubernetes posts alive queries
-const SupervisionURL = "/supervision/"
-
-// HTTPServer is the VesMgr HTTP server struct
-type HTTPServer struct {
- listener net.Listener
-}
-
-func (s *HTTPServer) init(address string) *HTTPServer {
- var err error
- s.listener, err = net.Listen("tcp", address)
- if err != nil {
- panic("Cannot listen:" + err.Error())
- }
- return s
-}
-
-func (s *HTTPServer) start(notifPath string, notifCh chan []byte, supCh chan chan string) {
- go runHTTPServer(s.listener, notifPath, notifCh, supCh)
-}
-
-func (s *HTTPServer) addr() net.Addr {
- return s.listener.Addr()
-}
-
-func runHTTPServer(listener net.Listener, xappNotifURL string, notifCh chan []byte, supervisionCh chan chan string) {
-
- logger.Info("vesmgr http server serving at %s", listener.Addr())
-
- http.HandleFunc(xappNotifURL, func(w http.ResponseWriter, r *http.Request) {
-
- switch r.Method {
- case "POST":
- logger.Info("httpServer: POST in %s", xappNotifURL)
- body, err := ioutil.ReadAll(r.Body)
- defer r.Body.Close()
- if err != nil {
- logger.Error("httpServer: Invalid body in POST request")
- return
- }
- notifCh <- body
- return
- default:
- logger.Error("httpServer: Invalid method %s to %s", r.Method, r.URL.Path)
- http.Error(w, "405 method not allowed", http.StatusMethodNotAllowed)
- return
- }
- })
-
- http.HandleFunc(SupervisionURL, func(w http.ResponseWriter, r *http.Request) {
-
- switch r.Method {
- case "GET":
- logger.Info("httpServer: GET supervision")
- supervisionAckCh := make(chan string)
- // send supervision to the main loop
- supervisionCh <- supervisionAckCh
- reply := <-supervisionAckCh
- logger.Info("httpServer: supervision ack from the main loop: %s", reply)
- fmt.Fprintf(w, reply)
- return
- default:
- logger.Error("httpServer: invalid method %s to %s", r.Method, r.URL.Path)
- http.Error(w, "405 method not allowed", http.StatusMethodNotAllowed)
- return
- }
-
- })
-
- http.Serve(listener, nil)
-}