Adds configuration file config.json
parent
813c0565f7
commit
1a8ef2ec3a
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"agent_port": 8080,
|
||||
"nginx_port": 80
|
||||
}
|
81
go/main.go
81
go/main.go
|
@ -14,19 +14,33 @@ package main
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Config holds the structure of the configuration file
|
||||
type Config struct {
|
||||
AgentPort int `json:"agent_port"`
|
||||
NginxPort int `json:"nginx_port"`
|
||||
}
|
||||
|
||||
// NginxData holds the nginx data structure for the API response to /nginx
|
||||
type NginxData struct {
|
||||
NginxState string `json:"nginx_status"`
|
||||
NginxState string `json:"nginx_state"`
|
||||
NginxConnections int `json:"nginx_connections"`
|
||||
}
|
||||
|
||||
// JicofoData holds the Jicofo data structure for the API response to /jicofo
|
||||
type JicofoData struct {
|
||||
JicofoState string `json:"jicofo_state"`
|
||||
JicofoAPIData map[string]interface{} `json:"jicofo_api_data"`
|
||||
}
|
||||
|
||||
// getNginxState checks the status of the nginx service
|
||||
func getNginxState() string {
|
||||
output, err := exec.Command("systemctl", "is-active", "nginx").Output()
|
||||
|
@ -42,8 +56,9 @@ func getNginxState() string {
|
|||
}
|
||||
|
||||
// getNginxConnections gets the number of active connections to the specified web port
|
||||
func getNginxConnections() int {
|
||||
output, err := exec.Command("bash", "-c", "netstat -an | grep ':80' | wc -l").Output()
|
||||
func getNginxConnections(nginxPort int) int {
|
||||
cmd := fmt.Sprintf("netstat -an | grep ':%d' | wc -l", nginxPort)
|
||||
output, err := exec.Command("bash", "-c", cmd).Output()
|
||||
if err != nil {
|
||||
log.Printf("Error counting the Nginx connections: %v", err)
|
||||
return -1
|
||||
|
@ -57,11 +72,48 @@ func getNginxConnections() int {
|
|||
return connectionsInt
|
||||
}
|
||||
|
||||
// getJicofoAPIData gets the response from Jicofo stats API
|
||||
func getJicofoAPIData() map[string]interface{} {
|
||||
output, err := exec.Command("bash", "-c", "curl -s http://localhost:8888/stats").Output()
|
||||
if err != nil {
|
||||
log.Printf("Error getting the Jicofo API stats: %v", err)
|
||||
return map[string]interface{}{"error": "failed to get the Jicofo API stats"}
|
||||
}
|
||||
var result map[string]interface{}
|
||||
if err := json.Unmarshal(output, &result); err != nil {
|
||||
log.Printf("Error in parsing the JSON: %v", err)
|
||||
return map[string]interface{}{"error": "invalid JSON format"}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// loadConfig loads the configuration from a JSON config file
|
||||
func loadConfig(filename string) (Config, error) {
|
||||
var config Config
|
||||
|
||||
file, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return config, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
bytes, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
return config, err
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(bytes, &config); err != nil {
|
||||
return config, err
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
// nginxHandler handles the /nginx endpoint
|
||||
func nginxHandler(w http.ResponseWriter, r *http.Request) {
|
||||
func nginxHandler(config Config, w http.ResponseWriter, r *http.Request) {
|
||||
data := NginxData {
|
||||
NginxState: getNginxState(),
|
||||
NginxConnections: getNginxConnections(),
|
||||
NginxConnections: getNginxConnections(config.NginxPort),
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(data)
|
||||
|
@ -69,9 +121,22 @@ func nginxHandler(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
// main sets up the http server and the routes
|
||||
func main() {
|
||||
http.HandleFunc("/nginx", nginxHandler)
|
||||
fmt.Println("Starting agent server on port 8080.")
|
||||
if err := http.ListenAndServe(":8080", nil); err != nil {
|
||||
|
||||
// load the configuration
|
||||
config, err := loadConfig("config.json")
|
||||
if err != nil {
|
||||
log.Fatalf("Error loading the config file: %v\n", err)
|
||||
}
|
||||
|
||||
// endpoints
|
||||
http.HandleFunc("/nginx", func(w http.ResponseWriter, r *http.Request) {
|
||||
nginxHandler(config, w, r)
|
||||
})
|
||||
|
||||
// start the http server
|
||||
agentPortStr := fmt.Sprintf(":%d", config.AgentPort)
|
||||
fmt.Printf("Starting agent server on port %d.\n", config.AgentPort)
|
||||
if err := http.ListenAndServe(agentPortStr, nil); err != nil {
|
||||
log.Fatalf("Could not start the server: %v\n", err)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue