Added support for HTTPS. Removed PHP version.
							parent
							
								
									d030f58776
								
							
						
					
					
						commit
						5d346bd01e
					
				| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
go/jilo-agent
 | 
					jilo-agent
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
								
									
									
										
											14
										
									
									CHANGELOG.md
									
									
									
									
								
								
							
							
										
											14
										
									
									CHANGELOG.md
									
									
									
									
								| 
						 | 
					@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Unreleased
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Links
 | 
				
			||||||
 | 
					- upstream: https://code.lindeas.com/lindeas/jilo-agent/compare/v0.1...HEAD
 | 
				
			||||||
 | 
					- codeberg: https://codeberg.org/lindeas/jilo-agent/compare/v0.1...HEAD
 | 
				
			||||||
 | 
					- github: https://github.com/lindeas/jilo-agent/compare/v0.1...HEAD
 | 
				
			||||||
 | 
					- gitlab: https://gitlab.com/lindeas/jilo-agent/-/compare/v0.1...HEAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Added
 | 
				
			||||||
 | 
					- Removed PHP version
 | 
				
			||||||
 | 
					- Added support for HTTPS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 0.1 - 2024-10-02
 | 
					## 0.1 - 2024-10-02
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Links
 | 
					#### Links
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,11 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## overview
 | 
					## overview
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jilo Agent - a remote agent for Jilo Web
 | 
					Jilo Agent - a remote agent for Jilo Web written in Go.
 | 
				
			||||||
 | 
					 | 
				
			||||||
Initial version is in PHP.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The current version is in "go" folder and is in Go.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## license
 | 
					## license
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +28,8 @@ go build -o jilo-agent main.go
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The config file is "jilo-agent.json", in the same folder as the "jilo-agent" binary.
 | 
					The config file is "jilo-agent.json", in the same folder as the "jilo-agent" binary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you add the SSL config options, HTTPS will be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can run the agent without a config file - then default vales are used.
 | 
					You can run the agent without a config file - then default vales are used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## usage
 | 
					## usage
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +0,0 @@
 | 
				
			||||||
<?php
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$jicofoStatsURL		= 'http://localhost:8888/stats';
 | 
					 | 
				
			||||||
$jvbStatsURL		= 'http://localhost:8080/colibri/stats';
 | 
					 | 
				
			||||||
$nginxPort		= '80';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
?>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,6 @@
 | 
				
			||||||
# - upx
 | 
					# - upx
 | 
				
			||||||
###
 | 
					###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o jilo-agent main.go
 | 
					CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o jilo-agent ../main.go
 | 
				
			||||||
upx --best --lzma -o jilo-agent-upx jilo-agent
 | 
					upx --best --lzma -o jilo-agent-upx jilo-agent
 | 
				
			||||||
mv jilo-agent-upx jilo-agent
 | 
					mv jilo-agent-upx jilo-agent
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,12 @@ agent_port: 8081
 | 
				
			||||||
# secret for checking JWT (same as in Jilo Web agent config)
 | 
					# secret for checking JWT (same as in Jilo Web agent config)
 | 
				
			||||||
secret_key: "mysecretkey"
 | 
					secret_key: "mysecretkey"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SSL certificate file (relative or full path)
 | 
				
			||||||
 | 
					ssl_cert: "jilo-agent.crt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SSL key file (relative or full path)
 | 
				
			||||||
 | 
					ssl_key: "jilo-agent.key"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# the port we check for nginx
 | 
					# the port we check for nginx
 | 
				
			||||||
nginx_port: 80
 | 
					nginx_port: 80
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,50 +0,0 @@
 | 
				
			||||||
<?php
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// get nginx data
 | 
					 | 
				
			||||||
function getNginxStatus() {
 | 
					 | 
				
			||||||
    $status = trim(shell_exec('systemctl is-active nginx'));
 | 
					 | 
				
			||||||
    return ($status === 'active') ? 'running' : 'not running';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
function getNginxConnections() {
 | 
					 | 
				
			||||||
    $connections = shell_exec("netstat -an | grep ':$nginxPort' | wc -l");
 | 
					 | 
				
			||||||
    return intval(trim($connections));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// get prosody data
 | 
					 | 
				
			||||||
function getProsodyStatus() {
 | 
					 | 
				
			||||||
    $status = trim(shell_exec('systemctl is-active prosody'));
 | 
					 | 
				
			||||||
    return ($status === 'active') ? 'running' : 'not running';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// get jicofo data
 | 
					 | 
				
			||||||
function getJicofoStatus() {
 | 
					 | 
				
			||||||
    $status = trim(shell_exec('systemctl is-active jicofo'));
 | 
					 | 
				
			||||||
    return ($status === 'active') ? 'running' : 'not running';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
function getJicofoStats($command) {
 | 
					 | 
				
			||||||
    $data = shell_exec($command);
 | 
					 | 
				
			||||||
    $decodedData = json_decode($data, true);
 | 
					 | 
				
			||||||
    if (json_last_error() !== JSON_ERROR_NONE) {
 | 
					 | 
				
			||||||
        return ['error' => 'Failed to decode the JSON reply from the service.'];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return $decodedData;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// get JVB data
 | 
					 | 
				
			||||||
function getJVBStatus() {
 | 
					 | 
				
			||||||
    $status = trim(shell_exec('systemctl is-active jitsi-videobridge2'));
 | 
					 | 
				
			||||||
    return ($status === 'active') ? 'running' : 'not running';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
function getJVBStats($command) {
 | 
					 | 
				
			||||||
    $data = shell_exec($command);
 | 
					 | 
				
			||||||
    $decodedData = json_decode($data, true);
 | 
					 | 
				
			||||||
    if (json_last_error() !== JSON_ERROR_NONE) {
 | 
					 | 
				
			||||||
        return ['error' => 'Failed to decode the JSON reply from the service.'];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return $decodedData;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
?>
 | 
					 | 
				
			||||||
								
									
									
										
											52
										
									
									index.php
									
									
									
									
								
								
							
							
										
											52
										
									
									index.php
									
									
									
									
								| 
						 | 
					@ -1,52 +0,0 @@
 | 
				
			||||||
<?php
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
require 'config.php';
 | 
					 | 
				
			||||||
include 'functions.php';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$scriptname = basename($_SERVER['SCRIPT_NAME']);
 | 
					 | 
				
			||||||
$request = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// the response is in JSON
 | 
					 | 
				
			||||||
header('Content-Type: application/json');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// nginx status
 | 
					 | 
				
			||||||
if ($request === '/nginx' || $request === "/$scriptname/nginx") {
 | 
					 | 
				
			||||||
    $data = [
 | 
					 | 
				
			||||||
        'nginx_status'		=> getNginxStatus(),
 | 
					 | 
				
			||||||
        'nginx_connections'	=> getNginxConnections(),
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
    echo json_encode($data, JSON_PRETTY_PRINT) . "\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// prosody status
 | 
					 | 
				
			||||||
} elseif ($request === '/prosody' || $request === "/$scriptname/prosody") {
 | 
					 | 
				
			||||||
    $data = [
 | 
					 | 
				
			||||||
        'prosody_status'	=> getProsodyStatus(),
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
    echo json_encode($data, JSON_PRETTY_PRINT) . "\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// jicofo status
 | 
					 | 
				
			||||||
} elseif ($request === '/jicofo' || $request === "/$scriptname/jicofo") {
 | 
					 | 
				
			||||||
    $jicofoStatsCommand = "curl -s $jicofoStatsURL";
 | 
					 | 
				
			||||||
    $jicofoStatsData = getJicofoStats($jicofoStatsCommand);
 | 
					 | 
				
			||||||
    $data = [
 | 
					 | 
				
			||||||
        'jicofo_status'		=> getJicofoStatus(),
 | 
					 | 
				
			||||||
        'jicofo_API_stats'	=> $jicofoStatsData,
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
    echo json_encode($data, JSON_PRETTY_PRINT) . "\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// jvb status
 | 
					 | 
				
			||||||
} elseif ($request === '/jvb' || $request === "/$scriptname/jvb") {
 | 
					 | 
				
			||||||
    $jvbStatsCommand = "curl -s $jvbStatsURL";
 | 
					 | 
				
			||||||
    $jvbStatsData = getJVBStats($jvbStatsCommand);
 | 
					 | 
				
			||||||
    $data = [
 | 
					 | 
				
			||||||
        'jvb_status'		=> getJVBStatus(),
 | 
					 | 
				
			||||||
        'jvb_API_stats'		=> $jvbStatsData,
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
    echo json_encode($data, JSON_PRETTY_PRINT) . "\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// default response - error
 | 
					 | 
				
			||||||
} else {
 | 
					 | 
				
			||||||
    echo json_encode(['error' => 'Endpoint not found']) . "\n";
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
?>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,8 @@ import (
 | 
				
			||||||
// Config holds the structure of the configuration file
 | 
					// Config holds the structure of the configuration file
 | 
				
			||||||
type Config struct {
 | 
					type Config struct {
 | 
				
			||||||
    AgentPort		int	`yaml:"agent_port"`
 | 
					    AgentPort		int	`yaml:"agent_port"`
 | 
				
			||||||
 | 
					    SSLcert		string	`yaml:"ssl_cert"`
 | 
				
			||||||
 | 
					    SSLkey		string	`yaml:"ssl_key"`
 | 
				
			||||||
    SecretKey		string	`yaml:"secret_key"`
 | 
					    SecretKey		string	`yaml:"secret_key"`
 | 
				
			||||||
    NginxPort		int	`yaml:"nginx_port"`
 | 
					    NginxPort		int	`yaml:"nginx_port"`
 | 
				
			||||||
    ProsodyPort		int	`yaml:"prosody_port"`
 | 
					    ProsodyPort		int	`yaml:"prosody_port"`
 | 
				
			||||||
| 
						 | 
					@ -317,7 +319,8 @@ func main() {
 | 
				
			||||||
    // start the http server
 | 
					    // start the http server
 | 
				
			||||||
    agentPortStr := fmt.Sprintf(":%d", config.AgentPort)
 | 
					    agentPortStr := fmt.Sprintf(":%d", config.AgentPort)
 | 
				
			||||||
    fmt.Printf("Starting Jilo agent on port %d.\n", config.AgentPort)
 | 
					    fmt.Printf("Starting Jilo agent on port %d.\n", config.AgentPort)
 | 
				
			||||||
    if err := http.ListenAndServe(agentPortStr, corsHandler); err != nil {
 | 
					//    if err := http.ListenAndServe(agentPortStr, corsHandler); err != nil {
 | 
				
			||||||
 | 
					    if err := http.ListenAndServeTLS(agentPortStr, config.SSLcert, config.SSLkey, corsHandler); err != nil {
 | 
				
			||||||
        log.Fatalf("Could not start the agent: %v\n", err)
 | 
					        log.Fatalf("Could not start the agent: %v\n", err)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue