FossDash deploys a Graphite/Grafana stack that will collect metrics produced by a Fossology instance, and possibly other tools.
This project is work in progress, and is made available under the MIT License.
In Fossology, a cron-scheduled exporter script publishes data regularly to the FossDash service, which collects, stores in the InfluxDB database. See this branch for the implementation of the exporter: dev/fossdash-exporter
A default dashboard is available in Grafana that lets you visualize the data straight away.
For the moment, the metrics produced by Fossology and graphed by Grafana are about Fossology usage (number of scans, users, etc) and are exported daily. But FossDash can also be used for real-time system metrics.
FossDash is designed to be accessible behind a single http access, both to browse the Grafana interface and to publish the metrics. An Apache reverse proxy is configured to redirect trafic such as:
http://fossdash/grafana
points to Grafanahttp://fossdash/influxdb
is used to POST metrics
The docker-compose file and Grafana/Influx DB are configured to be used on the same server as Fossology, also delpoyed with Docker, for simplicity - but both services can be hosted on separate servers.
Grafana allows the configuration of anonymous users, see the grafana.ini
file and
the documentation on anonymous-authentication
- Edit the
.env
file next to docker compose and provide required environment variables:
GF_SERVER_ROOT_URL=<full-url>
GF_SERVER_DOMAIN=<server-domain-name>
GF_SECURITY_ADMIN_PASSWORD=<first-run-password>
- initialize instance
docker-compose up -p fossdash -d
- Data generator scripts can be used to produce random test data
- A specific Fossology version must be deployed to regularly publish metrics to the FossDash server.
Fossology reporting
feature is based on cyclical reporting of the predefined metrics.
Those metrics are gathered by Python
script.
The script reads the database configuration from Fossology
DB config file.
Default location is set to /usr/local/etc/fossology/Db.conf
, but it can be changed by DB_CONFIG_FILE
environment variable. (*also see CRON)
Python script executes queries against the database, prepare the specific output format and simply print the output to standard output.
The Python script is by default executed by shell script - fossdash.run
, which takes the output and put it into a temporary file.
Such prepared file is being sent with curl
to InfluxDB service URL configured by FOSSDASH_URL
var within docker-compose.yaml
.
Not setting the FOSSDASH_URL
will prevent the script from running the query (it will exit after being initialized by CRON).
Above operations are scheduled in CRON
service, which is added to web
variant of the fossology instance, but also run if Fossology is instantiated as a all in one
variant.
docker-compose.yaml
services:
web:
image: fossology:latest
environment:
- REPORTING_URL=http://influxdb:8086
- REPORTING_DB_NAME=fossology_db
command: web
- If the
FOSSDASH_URL
is not set - there will be no reporting enaled. - If
FOSSDASH_DB_NAME
is not set - the default value will be usedfossology_db
The reporting is done in intervals defined in CRON job.
The file in which the CRON job is defined is install/db/db.cron
- the file was being installed by default but it may not be ideal, as it suggests DB operations.
*/1 * * * * root /fossology/fossdash.run >> /tmp/fossdash.txt 2>&1
In above example the job is configured to run every minute.
the output of the whole operation is redirected to /tmp/fossdash.txt
By default, a CRON triggered task have no access to the docker environment.
They need to be passed somehow to the script run by CRON.
For this there is an entry in the docker-entrypoint.sh
script.
env|grep REPORTING > /usr/local/etc/fossology/fossdash.conf || echo "No FOSSDASH configuration found."
At the end there is a fossdash.conf
file created, with values of environment variables containing FASSDASH
word.
The fossdash.conf
is being read by the fossdash.run
file when executed by CRON:
. /usr/local/etc/fossology/fossdash.conf
[ -z "$FOSSDASH_URL" ] && echo "Missing FOSSDASH_URL variable. Exiting." && exit 0
which python >/dev/null || exit 1
database=${FOSSDASH_DB_NAME:-fossology_db}
# ...
- The Fossology export does not work if no upload has ever been performed.
- FIX: run a scan !
master