diff --git a/roles/collectd/server/files/fmn-types.db b/roles/collectd/server/files/fmn-types.db new file mode 100644 index 0000000000..80c198dde5 --- /dev/null +++ b/roles/collectd/server/files/fmn-types.db @@ -0,0 +1 @@ +fmn_cache value:GAUGE:0:U diff --git a/roles/collectd/server/files/fmn.conf b/roles/collectd/server/files/fmn.conf new file mode 100644 index 0000000000..5b3ee5f36c --- /dev/null +++ b/roles/collectd/server/files/fmn.conf @@ -0,0 +1 @@ +TypesDB "/usr/share/collectd/fmn-types.db" diff --git a/roles/collectd/server/tasks/main.yml b/roles/collectd/server/tasks/main.yml index 4b33ed29e3..95b8160b0b 100644 --- a/roles/collectd/server/tasks/main.yml +++ b/roles/collectd/server/tasks/main.yml @@ -29,9 +29,27 @@ - collectd/server when: ansible_distribution_major_version|int == 8 -# install collectd rrd config -- name: install collectd rrd config - copy: src=rrdtool.conf dest=/etc/collectd.d/rrdtool.conf +# install collectd types +- name: install collectd types + copy: + src: "{{ item }}" + dest: /usr/share/collectd/{{ item }} + loop: + - fmn-types.db + notify: + - restart collectd + tags: + - config + - collectd/server + +# install collectd configs +- name: install collectd config + copy: + src: "{{ item }}" + dest: /etc/collectd.d/{{ item }} + loop: + - rrdtool.conf + - fmn-data.conf notify: - restart collectd tags: diff --git a/roles/openshift-apps/fmn/files/imagestream.yml b/roles/openshift-apps/fmn/files/imagestream.yml index 55f348f844..6bb63c9cc3 100644 --- a/roles/openshift-apps/fmn/files/imagestream.yml +++ b/roles/openshift-apps/fmn/files/imagestream.yml @@ -23,6 +23,11 @@ items: scheduled: true referencePolicy: type: Source + # The Python 3.10 builder image plus collectd + - apiVersion: image.openshift.io/v1 + kind: ImageStream + metadata: + name: python-310-collectd # Sendria (to view email notifications in staging) - apiVersion: image.openshift.io/v1 kind: ImageStream diff --git a/roles/openshift-apps/fmn/templates/Dockerfile-builder-image b/roles/openshift-apps/fmn/templates/Dockerfile-builder-image new file mode 100644 index 0000000000..bb7b343bbf --- /dev/null +++ b/roles/openshift-apps/fmn/templates/Dockerfile-builder-image @@ -0,0 +1,8 @@ +FROM quay.io/fedora/python-310:latest +LABEL \ + name="bodhi-base" \ + vendor="Fedora Infrastructure" \ + license="MIT" +USER root +RUN dnf install -y collectd collectd-python patchutils +USER 1001 diff --git a/roles/openshift-apps/fmn/templates/buildconfig.yml b/roles/openshift-apps/fmn/templates/buildconfig.yml index e2a51b4152..84f445394d 100644 --- a/roles/openshift-apps/fmn/templates/buildconfig.yml +++ b/roles/openshift-apps/fmn/templates/buildconfig.yml @@ -2,6 +2,32 @@ --- apiVersion: build.openshift.io/v1 kind: BuildConfig +metadata: + name: python-310-collectd + labels: + app: fmn + build: python-310-collectd +spec: + runPolicy: Serial + source: + type: Dockerfile + dockerfile: |- + {{ load_file('Dockerfile-builder-image') | indent(6) }} + strategy: + type: Docker + dockerStrategy: + from: + kind: ImageStreamTag + name: quay.io/fedora/python-310:latest + output: + to: + kind: ImageStreamTag + name: python-310-collectd:latest + triggers: + - type: ImageChange +--- +apiVersion: build.openshift.io/v1 +kind: BuildConfig metadata: name: fmn labels: @@ -20,10 +46,8 @@ spec: sourceStrategy: from: kind: ImageStreamTag - # name: python:3.10 - # namespace: openshift - # OpenShift does not have Python 3.10 (yet), use our own ImageStream - name: python-310:latest + # Our own ImageStream with collectd added to it + name: python-310-collectd:latest env: # The .s2i/bin/assemble script uses this to build the frontend with the # correct API and Ipsilon addresses. diff --git a/roles/openshift-apps/fmn/templates/collectd.conf b/roles/openshift-apps/fmn/templates/collectd.conf new file mode 100644 index 0000000000..eee6a0652a --- /dev/null +++ b/roles/openshift-apps/fmn/templates/collectd.conf @@ -0,0 +1,51 @@ +# +# Collectd configuration (fmn.core.collectd) +# + +Hostname "notifications{{ env_suffix }}.fedoraproject.org" +FQDNLookup true +#BaseDir "/usr/var/lib/collectd" +#PIDFile "/usr/var/run/collectd.pid" +#PluginDir "/usr/lib/collectd" +#Interval 10 +#ReadThreads 5 + +# This is the default but it needs to be defined so we can add more DB files later. +TypesDB "/usr/share/collectd/types.db" + +LoadPlugin logfile + + + LogLevel "info" + File STDOUT + Timestamp true + + +# Send data to log01 +LoadPlugin network + + Server "log01" + + +# FMN + +TypesDB "/opt/app-root/src/config/collectd-types.db" + + + Globals true + + + + LogTraces true + Interactive false + ModulePath "/opt/app-root/src" + Import "fmn.core.collectd" + + + ## Interval between two collections. The collectd default of 10 seconds is + ## way too short, this plugin sets the default to 1h (3600s). Adjust + ## depending on how frequently the cache is rebuilt. Remember that if you + ## change the interval, you'll have to recreate your RRD files. + # Interval 3600 + + diff --git a/roles/openshift-apps/fmn/templates/configmap.yml b/roles/openshift-apps/fmn/templates/configmap.yml index c11c80f113..abbf53e955 100644 --- a/roles/openshift-apps/fmn/templates/configmap.yml +++ b/roles/openshift-apps/fmn/templates/configmap.yml @@ -23,3 +23,5 @@ items: {{ load_file('sender-irc.toml') | indent(6) }} sender-matrix.toml: |- {{ load_file('sender-matrix.toml') | indent(6) }} + collectd.conf: |- + {{ load_file('collectd.conf') | indent(6) }} diff --git a/roles/openshift-apps/fmn/templates/deploymentconfig.yml b/roles/openshift-apps/fmn/templates/deploymentconfig.yml index 695914a4a8..afcf413fd4 100644 --- a/roles/openshift-apps/fmn/templates/deploymentconfig.yml +++ b/roles/openshift-apps/fmn/templates/deploymentconfig.yml @@ -520,6 +520,63 @@ spec: kind: ImageStreamTag name: redis:latest --- +# Collectd stats collector +apiVersion: apps.openshift.io/v1 +kind: DeploymentConfig +metadata: + name: collectd + labels: + app: fmn +spec: + replicas: 1 + selector: + app: fmn + deploymentconfig: collectd + strategy: + type: Recreate + template: + metadata: + creationTimestamp: null + labels: + app: fmn + deploymentconfig: collectd + spec: + containers: + - name: collectd + imagePullPolicy: Always + volumeMounts: + - name: etc-fmn + mountPath: "/etc/fmn" + readOnly: true + env: + - name: APP_SCRIPT + value: ".s2i/run-collectd.sh" + - name: CACHE__SETUP_ARGS__PASSWORD + valueFrom: + secretKeyRef: + name: fmn + key: redis-password + - name: CACHE__SETUP_ARGS__HASH_KEY + valueFrom: + secretKeyRef: + name: fmn + key: cache-hash-key + + volumes: + - name: etc-fmn + configMap: + name: fmn + triggers: + - type: ConfigChange + - type: ImageChange + imageChangeParams: + automatic: true + containerNames: + - collectd + from: + kind: ImageStreamTag + name: fmn:latest +--- # Sendria, to display email notifications in staging {% if env == 'staging' %} apiVersion: apps.openshift.io/v1