2 * Copyright (c) 2019 AT&T Intellectual Property.
3 * Copyright (c) 2018-2019 Nokia.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 * platform project (RICP).
31 // SupervisionURL is the url where kubernetes posts alive queries
32 const SupervisionURL = "/supervision/"
34 // HTTPServer is the VesMgr HTTP server struct
35 type HTTPServer struct {
39 func (s *HTTPServer) init(address string) *HTTPServer {
41 s.listener, err = net.Listen("tcp", address)
43 panic("Cannot listen:" + err.Error())
48 func (s *HTTPServer) start(notifPath string, notifCh chan []byte, supCh chan chan string) {
49 go runHTTPServer(s.listener, notifPath, notifCh, supCh)
52 func (s *HTTPServer) addr() net.Addr {
53 return s.listener.Addr()
56 func runHTTPServer(listener net.Listener, xappNotifURL string, notifCh chan []byte, supervisionCh chan chan string) {
58 logger.Info("vesmgr http server serving at %s", listener.Addr())
60 http.HandleFunc(xappNotifURL, func(w http.ResponseWriter, r *http.Request) {
64 logger.Info("httpServer: POST in %s", xappNotifURL)
65 body, err := ioutil.ReadAll(r.Body)
68 logger.Error("httpServer: Invalid body in POST request")
74 logger.Error("httpServer: Invalid method %s to %s", r.Method, r.URL.Path)
75 http.Error(w, "405 method not allowed", http.StatusMethodNotAllowed)
80 http.HandleFunc(SupervisionURL, func(w http.ResponseWriter, r *http.Request) {
84 logger.Info("httpServer: GET supervision")
85 supervisionAckCh := make(chan string)
86 // send supervision to the main loop
87 supervisionCh <- supervisionAckCh
88 reply := <-supervisionAckCh
89 logger.Info("httpServer: supervision ack from the main loop: %s", reply)
93 logger.Error("httpServer: invalid method %s to %s", r.Method, r.URL.Path)
94 http.Error(w, "405 method not allowed", http.StatusMethodNotAllowed)
100 http.Serve(listener, nil)