Add convenience functions, update Docker setup, and integrate Webpack for building WebRTC internals exporter #3
37
README.md
37
README.md
@@ -55,6 +55,24 @@ The collector will start gathering WebRTC stats from the Selenium container and
|
|||||||
|
|
||||||
To stop the Docker containers run: `docker compose down -v`
|
To stop the Docker containers run: `docker compose down -v`
|
||||||
|
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
|
||||||
|
| Environment Variable | Service | Default Value | Description |
|
||||||
|
| ------------------------------- | -------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||||
|
| `TELEGRAF_HOSTNAME` | telegraf | None, **must** be set | Hostname used to identify the host/user between sessions |
|
||||||
|
| `TELEGRAF_MONGODB_DSN` | telegraf | `mongodb://stats_user:%40z%5EVFhN7q%25vzit@tube.kobim.cloud:27107/?authSource=statistics` | DSN for the MongoDB service |
|
||||||
|
| `TELEGRAF_MONGODB_DATABASE` | telegraf | Database name to use for MongoDB |
|
||||||
|
| `VIDEO_URL` | collector | `https://tube.kobim.cloud/w/iN2T8PmbSb4HJTDA2rV3sg` | URL for the video to be analyzed |
|
||||||
|
| `HUB_URL` | collector | None | URL for the Selenium Hub. If not set, the local Chrome driver will be used |
|
||||||
|
| `SOCKET_URL` | collector | `localhost` | Socket URL for Telegraf service |
|
||||||
|
| `SOCKET_PORT` | collector & telegraf | `8094` | Socket port for Telegraf service |
|
||||||
|
| `WEBRTC_INTERNALS_PATH` | collector | `os.path.abspath(os.path.join(os.path.dirname(__file__), 'webrtc-internals-exporter'))` | Path for WebRTC internals exporter extension |
|
||||||
|
| `WEBRTC_INTERNALS_EXPORTER_URL` | WebRTC extension | `http://localhost:9092` | Collector URL for the WebRTC internals exporter extension |
|
||||||
|
|
||||||
|
Variables can be set in the `.env` file.
|
||||||
|
|
||||||
|
|
||||||
### Monitoring
|
### Monitoring
|
||||||
A noVNC server is available at [http://localhost:7900](http://localhost:7900/?autoconnect=1&resize=scale&password=secret) to monitor the Selenium container. The password is `secret`.
|
A noVNC server is available at [http://localhost:7900](http://localhost:7900/?autoconnect=1&resize=scale&password=secret) to monitor the Selenium container. The password is `secret`.
|
||||||
|
|
||||||
@@ -71,6 +89,10 @@ The `docker-compose.yml` file defines the following services:
|
|||||||
|
|
||||||
The `Dockerfile` sets up the Python environment and installs the necessary dependencies to run the `main.py` script.
|
The `Dockerfile` sets up the Python environment and installs the necessary dependencies to run the `main.py` script.
|
||||||
|
|
||||||
|
### Monolithic Dockerfile
|
||||||
|
|
||||||
|
`Monolith.dockerfile` is a single Dockerfile that combines the Selenium, Telegraf, and Collector services into a single container. This is useful for deployment in a single container environment.
|
||||||
|
|
||||||
### Main Python Script
|
### Main Python Script
|
||||||
|
|
||||||
The `main.py` script sets up the Selenium WebDriver, collects WebRTC stats, and sends them to the Telegraf service.
|
The `main.py` script sets up the Selenium WebDriver, collects WebRTC stats, and sends them to the Telegraf service.
|
||||||
@@ -78,20 +100,7 @@ The `main.py` script sets up the Selenium WebDriver, collects WebRTC stats, and
|
|||||||
### WebRTC Internals Exporter
|
### WebRTC Internals Exporter
|
||||||
|
|
||||||
The `webrtc-internals-exporter` directory contains a Chromium extension that collects WebRTC stats from the browser.
|
The `webrtc-internals-exporter` directory contains a Chromium extension that collects WebRTC stats from the browser.
|
||||||
|
It uses Webpack to replace the server collector endpoint with an environment variable.
|
||||||
## Working Project Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
peertube-collector/
|
|
||||||
├── requirements.txt
|
|
||||||
├── telegraf.conf
|
|
||||||
├── docker-compose.yml
|
|
||||||
├── Dockerfile
|
|
||||||
├── main.py
|
|
||||||
├── .env
|
|
||||||
└── utils/
|
|
||||||
└── webrtc-internals-exporter/
|
|
||||||
```
|
|
||||||
|
|
||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
|
@@ -26,6 +26,7 @@ services:
|
|||||||
- DATABASE=${TELEGRAF_MONGODB_DATABASE:?"Database name is required"}
|
- DATABASE=${TELEGRAF_MONGODB_DATABASE:?"Database name is required"}
|
||||||
- DSN=${TELEGRAF_MONGODB_DSN:?"DSN is required"}
|
- DSN=${TELEGRAF_MONGODB_DSN:?"DSN is required"}
|
||||||
- HOSTNAME=${TELEGRAF_HOSTNAME:?"Hostname is required"}
|
- HOSTNAME=${TELEGRAF_HOSTNAME:?"Hostname is required"}
|
||||||
|
- SOCKET_PORT=${SOCKET_PORT:?"Socket port is required"}
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:8080"]
|
test: ["CMD", "curl", "-f", "http://localhost:8080"]
|
||||||
interval: 5s
|
interval: 5s
|
||||||
|
@@ -15,6 +15,11 @@ if [ -z "$TELEGRAF_MONGODB_DATABASE" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -z "$SOCKET_PORT" ]; then
|
||||||
|
echo "Error: SOCKET_PORT is not set"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$VIDEO_URL" ]; then
|
if [ -z "$VIDEO_URL" ]; then
|
||||||
echo "Error: VIDEO_URL is not set"
|
echo "Error: VIDEO_URL is not set"
|
||||||
exit 1
|
exit 1
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
dedup_interval = "600s"
|
dedup_interval = "600s"
|
||||||
|
|
||||||
[[inputs.socket_listener]]
|
[[inputs.socket_listener]]
|
||||||
service_address = "udp://:8094"
|
service_address = "udp://:${SOCKET_PORT}"
|
||||||
data_format = "xpath_json"
|
data_format = "xpath_json"
|
||||||
[[inputs.socket_listener.xpath]]
|
[[inputs.socket_listener.xpath]]
|
||||||
metric_name = "'peertube'"
|
metric_name = "'peertube'"
|
||||||
|
14
webrtc-internals-exporter/webpack/package-lock.json
generated
14
webrtc-internals-exporter/webpack/package-lock.json
generated
@@ -12,6 +12,7 @@
|
|||||||
"babel-loader": "^8.2.2",
|
"babel-loader": "^8.2.2",
|
||||||
"clean-webpack-plugin": "^3.0.0",
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
"copy-webpack-plugin": "^12.0.2",
|
"copy-webpack-plugin": "^12.0.2",
|
||||||
|
"dotenv": "^16.4.7",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
"html-webpack-plugin": "^5.3.1",
|
"html-webpack-plugin": "^5.3.1",
|
||||||
"mini-css-extract-plugin": "^1.6.0",
|
"mini-css-extract-plugin": "^1.6.0",
|
||||||
@@ -3899,6 +3900,19 @@
|
|||||||
"tslib": "^2.0.3"
|
"tslib": "^2.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/dotenv": {
|
||||||
|
"version": "16.4.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
|
||||||
|
"integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://dotenvx.com"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/dunder-proto": {
|
"node_modules/dunder-proto": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
"babel-loader": "^8.2.2",
|
"babel-loader": "^8.2.2",
|
||||||
"clean-webpack-plugin": "^3.0.0",
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
"copy-webpack-plugin": "^12.0.2",
|
"copy-webpack-plugin": "^12.0.2",
|
||||||
|
"dotenv": "^16.4.7",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
"html-webpack-plugin": "^5.3.1",
|
"html-webpack-plugin": "^5.3.1",
|
||||||
"mini-css-extract-plugin": "^1.6.0",
|
"mini-css-extract-plugin": "^1.6.0",
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { EnvironmentPlugin } = require('webpack');
|
const { EnvironmentPlugin } = require('webpack');
|
||||||
|
const envPath = path.resolve(__dirname, '../../.env');
|
||||||
|
const envConfig = require('dotenv').config({ path: envPath }).parsed;
|
||||||
|
|
||||||
module.exports = (env) => {
|
module.exports = (env) => {
|
||||||
const url = env.URL || 'http://localhost';
|
const url = env.URL || 'http://localhost';
|
||||||
@@ -25,7 +27,7 @@ module.exports = (env) => {
|
|||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new EnvironmentPlugin({
|
new EnvironmentPlugin({
|
||||||
WEBRTC_INTERNALS_EXPORTER_URL: url,
|
WEBRTC_INTERNALS_EXPORTER_URL: envConfig.WEBRTC_INTERNALS_EXPORTER_URL || url
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user