Commit 0cfa1797 authored by Muhammad Umair Zafar's avatar Muhammad Umair Zafar
Browse files

add the anonymous functions to initialize the service and metrics endpoints as...

add the anonymous functions to initialize the service and metrics endpoints as per the development guide
parent 9c6666dc
Loading
Loading
Loading
Loading
+91 −26
Original line number Diff line number Diff line
/*
 * MEC Sandbox API
 * Copyright (c) 2022  The AdvantEDGE Authors
 *
 * The MEC Sandbox API described using OpenAPI
 * 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
 *
 * API version: 0.0.3
 * Contact: cti_support@etsi.org
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 *     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.
 */

 package main

 import (
	"log"
	 "net/http"
	 "os"
	 "os/signal"
	 "syscall"
	 "time"
 
	// WARNING!
	// Change this to a fully-qualified import path
	// once you place this file into your project.
	// For example,
	//
	//    sw "github.com/myname/myrepo/go"
	//
	sw "./go"
	 server "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-rnis/server"
	 log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
	 "github.com/prometheus/client_golang/prometheus/promhttp"
 
	 "github.com/gorilla/handlers"
 )
 
 func init() {
	 // Log as JSON instead of the default ASCII formatter.
	 log.MeepJSONLogInit("meep-sandbox-api")
 }
 
 func main() {
	log.Printf("Server started")
	 log.Info(os.Args)
 
	 log.Info("Starting Sandbox API Service")
 
	 run := true
	 go func() {
		 sigchan := make(chan os.Signal, 10)
		 signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM)
		 <-sigchan
		 log.Info("Program killed !")
		 // do last actions and wait for all write operations to end
		 run = false
	 }()
 
	 go func() {
		 // Initialize Sandbox API
		 err := server.Init()
		 if err != nil {
			 log.Error("Failed to initialize Sanddbox API Service")
			 run = false
			 return
		 }
 
		 // Start Sandbox API Event Handler thread
		 err = server.Run()
		 if err != nil {
			 log.Error("Failed to start Sandbox API Service")
			 run = false
			 return
		 }
 
		 // Start Sandbox API REST API Server
		 router := server.NewRouter()
		 methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST", "PUT"})
		 header := handlers.AllowedHeaders([]string{"content-type"})
		 log.Fatal(http.ListenAndServe(":80", handlers.CORS(methods, header)(router)))
		 run = false
	 }()
 
	router := sw.NewRouter()
	 go func() {
		 // Initialize Metrics Endpoint
		 http.Handle("/metrics", promhttp.Handler())
		 log.Fatal(http.ListenAndServe(":9000", nil))
		 run = false
	 }()
 
	log.Fatal(http.ListenAndServe(":8080", router))
	 count := 0
	 for {
		 if !run {
			 _ = server.Stop()
			 log.Info("Ran for ", count, " seconds")
			 break
		 }
		 time.Sleep(time.Second)
		 count++
	 }
 
 }
 
 No newline at end of file