# Installation
Go to the [OSM User Guide](https://osm.etsi.org/docs/user-guide/03-installing-osm.html#charmed-installation) for the highly available production-grade deployment.
-For a more minimal cluster suitable for testing, deploy the [single instance OSM bundle](https://jaas.ai/osm/bundle).
+For a more minimal cluster suitable for testing, deploy the [single instance OSM bundle](https://charmhub.io/osm).
# Bundle Components
-- [grafana](https://jaas.ai/u/charmed-osm/grafana/0): A CAAS charm to deploy grafana for metrics visualization
-- [kafka k8s](https://jaas.ai/u/charmed-osm/kafka-k8s): A CAAS charm to deploy Kafka used as a messaging bus between OSM components
-- [lcm](https://jaas.ai/u/charmed-osm/lcm/0): A CAAS charm to deploy OSM's Lifecycle Management (LCM) component responsible for network services orchestration.
-- [mariadb k8s](https://jaas.ai/u/charmed-osm/mariadb-k8s): A Juju charm deploying and managing database server (MariaDB) on Kubernetes
-- [mon](https://jaas.ai/u/charmed-osm/mon/0): A CAAS charm to deploy OSM's Monitoring Interface (MON) responsible for metrics collection
-- [mongodb k8s](https://jaas.ai/u/charmed-osm/mongodb-k8s): A CAAS charm to deploy MongoDB responsible for structuring the data
-- [nbi](https://jaas.ai/u/charmed-osm/nbi/5): A juju charm to deploy OSM's Northbound Interface (NBI) on Kubernetes.
-- [pol](https://jaas.ai/u/charmed-osm/pol/0): A CAAS charm to deploy OSM's Policy Module (POL) responsible for configuring alarms and actions
-- [prometheus](https://jaas.ai/u/charmed-osm/prometheus): A CAAS charm to deploy Prometheus.
-- [ro](https://jaas.ai/u/charmed-osm/ro/0): A CAAS charm to deploy OSM's Resource Orchestrator (RO) responsible for the life cycle management of VIM resources.
-- [ng-ui](https://jaas.ai/u/charmed-osm/ng-ui): A CAAS charm to deploy OSM's User Interface (UI)
-- [zookeeper k8s](https://jaas.ai/u/charmed-osm/zookeeper-k8s): A CAAS charm to deploy zookeeper for distributed synchronization
+- [grafana](https://charmhub.io/grafana-k8s): A CAAS charm to deploy grafana for metrics visualization
+- [kafka k8s](https://charmhub.io/kafka-k8s): A CAAS charm to deploy Kafka used as a messaging bus between OSM components
+- [lcm](https://charmhub.io/osm-lcm): A CAAS charm to deploy OSM's Lifecycle Management (LCM) component responsible for network services orchestration.
+- [mariadb k8s](https://charmhub.io/charmed-osm-mariadb-k8s): A Juju charm deploying and managing database server (MariaDB) on Kubernetes
+- [mon](https://charmhub.io/osm-mon): A CAAS charm to deploy OSM's Monitoring Interface (MON) responsible for metrics collection
+- [mongodb k8s](https://charmhub.io/mongodb-k8s): A CAAS charm to deploy MongoDB responsible for structuring the data
+- [nbi](https://charmhub.io/osm-nbi): A juju charm to deploy OSM's Northbound Interface (NBI) on Kubernetes.
+- [pol](https://charmhub.io/osm-pol): A CAAS charm to deploy OSM's Policy Module (POL) responsible for configuring alarms and actions
+- [prometheus](https://charmhub.io/prometheus-k8s): A CAAS charm to deploy Prometheus.
+- [ro](https://charmhub.io/osm-ro): A CAAS charm to deploy OSM's Resource Orchestrator (RO) responsible for the life cycle management of VIM resources.
+- [ng-ui](https://charmhub.io/osm-ng-ui): A CAAS charm to deploy OSM's User Interface (UI)
+- [zookeeper k8s](https://charmhub.io/zookeeper): A CAAS charm to deploy zookeeper for distributed synchronization
# Troubleshooting
# Bundle Components
-- [grafana](https://jaas.ai/u/charmed-osm/grafana/0): A CAAS charm to deploy grafana for metrics visualization
-- [kafka k8s](https://jaas.ai/u/charmed-osm/kafka-k8s): A CAAS charm to deploy Kafka used as a messaging bus between OSM components
-- [lcm](https://jaas.ai/u/charmed-osm/lcm/0): A CAAS charm to deploy OSM's Lifecycle Management (LCM) component responsible for network services orchestration.
-- [mariadb k8s](https://jaas.ai/u/charmed-osm/mariadb-k8s): A Juju charm deploying and managing database server (MariaDB) on Kubernetes
-- [mon](https://jaas.ai/u/charmed-osm/mon/0): A CAAS charm to deploy OSM's Monitoring Interface (MON) responsible for metrics collection
-- [mongodb k8s](https://jaas.ai/u/charmed-osm/mongodb-k8s): A CAAS charm to deploy MongoDB responsible for structuring the data
-- [nbi](https://jaas.ai/u/charmed-osm/nbi/5): A juju charm to deploy OSM's Northbound Interface (NBI) on Kubernetes.
-- [pol](https://jaas.ai/u/charmed-osm/pol/0): A CAAS charm to deploy OSM's Policy Module (POL) responsible for configuring alarms and actions
-- [prometheus](https://jaas.ai/u/charmed-osm/prometheus): A CAAS charm to deploy Prometheus.
-- [ro](https://jaas.ai/u/charmed-osm/ro/0): A CAAS charm to deploy OSM's Resource Orchestrator (RO) responsible for the life cycle management of VIM resources.
-- [ng-ui](https://jaas.ai/u/charmed-osm/ng-ui): A CAAS charm to deploy OSM's User Interface (UI)
-- [zookeeper k8s](https://jaas.ai/u/charmed-osm/zookeeper-k8s): A CAAS charm to deploy zookeeper for distributed synchronization
+- [grafana](https://charmhub.io/grafana-k8s): A CAAS charm to deploy grafana for metrics visualization
+- [kafka k8s](https://charmhub.io/kafka-k8s): A CAAS charm to deploy Kafka used as a messaging bus between OSM components
+- [lcm](https://charmhub.io/osm-lcm): A CAAS charm to deploy OSM's Lifecycle Management (LCM) component responsible for network services orchestration.
+- [mariadb k8s](https://charmhub.io/charmed-osm-mariadb-k8s): A Juju charm deploying and managing database server (MariaDB) on Kubernetes
+- [mon](https://charmhub.io/osm-mon): A CAAS charm to deploy OSM's Monitoring Interface (MON) responsible for metrics collection
+- [mongodb k8s](https://charmhub.io/mongodb-k8s): A CAAS charm to deploy MongoDB responsible for structuring the data
+- [nbi](https://charmhub.io/osm-nbi): A juju charm to deploy OSM's Northbound Interface (NBI) on Kubernetes.
+- [pol](https://charmhub.io/osm-pol): A CAAS charm to deploy OSM's Policy Module (POL) responsible for configuring alarms and actions
+- [prometheus](https://charmhub.io/prometheus-k8s): A CAAS charm to deploy Prometheus.
+- [ro](https://charmhub.io/osm-ro): A CAAS charm to deploy OSM's Resource Orchestrator (RO) responsible for the life cycle management of VIM resources.
+- [ng-ui](https://charmhub.io/osm-ng-ui): A CAAS charm to deploy OSM's User Interface (UI)
+- [zookeeper k8s](https://charmhub.io/zookeeper): A CAAS charm to deploy zookeeper for distributed synchronization
# Troubleshooting
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-venv
-.vscode
-build
-*.charm
-.coverage
-coverage.xml
-.stestr
-cover
-release
\ No newline at end of file
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-venv
-.vscode
-build
-*.charm
-.coverage
-coverage.xml
-.gitignore
-.stestr
-cover
-release
-tests/
-requirements*
-tox.ini
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
----
-extends: default
-
-yaml-files:
- - "*.yaml"
- - "*.yml"
- - ".yamllint"
-ignore: |
- .tox
- cover/
- build/
- venv
- release/
- templates/
+++ /dev/null
-<!-- Copyright 2021 Canonical Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License"); you may
-not use this file except in compliance with the License. You may obtain
-a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-License for the specific language governing permissions and limitations
-under the License.
-
-For those usages not covered by the Apache License, Version 2.0 please
-contact: legal@canonical.com
-
-To get in touch with the maintainers, please contact:
-osm-charmers@lists.launchpad.net -->
-
-# Grafana operator Charm for Kubernetes
-
-## Requirements
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-type: charm
-bases:
- - build-on:
- - name: ubuntu
- channel: "20.04"
- architectures: ["amd64"]
- run-on:
- - name: ubuntu
- channel: "20.04"
- architectures:
- - amd64
- - aarch64
- - arm64
-parts:
- charm:
- build-packages: [git]
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-options:
- max_file_size:
- type: int
- description: |
- The maximum file size, in megabytes. If there is a reverse proxy in front
- of Keystone, it may need to be configured to handle the requested size.
- Note: if set to 0, there is no limit.
- default: 0
- ingress_class:
- type: string
- description: |
- Ingress class name. This is useful for selecting the ingress to be used
- in case there are multiple ingresses in the underlying k8s clusters.
- ingress_whitelist_source_range:
- type: string
- description: |
- A comma-separated list of CIDRs to store in the
- ingress.kubernetes.io/whitelist-source-range annotation.
-
- This can be used to lock down access to
- Keystone based on source IP address.
- default: ""
- tls_secret_name:
- type: string
- description: TLS Secret name
- default: ""
- site_url:
- type: string
- description: Ingress URL
- default: ""
- cluster_issuer:
- type: string
- description: Name of the cluster issuer for TLS certificates
- default: ""
- osm_dashboards:
- type: boolean
- description: Enable OSM System monitoring dashboards
- default: false
- image_pull_policy:
- type: string
- description: |
- ImagePullPolicy configuration for the pod.
- Possible values: always, ifnotpresent, never
- default: always
- mysql_uri:
- type: string
- description: |
- Mysql uri with the following format:
- mysql://<user>:<pass>@<host>:<port>/<database>
- admin_user:
- type: string
- description: Admin user
- default: admin
- log_level:
- type: string
- description: |
- Logging level for Grafana. Options are “debug”, “info”,
- “warn”, “error”, and “critical”.
- default: info
- port:
- description: The port grafana-k8s will be listening on
- type: int
- default: 3000
- security_context:
- description: Enables the security context of the pods
- type: boolean
- default: false
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<svg id="Layer_1" style="enable-background:new 0 0 85.12 92.46" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="250px" viewBox="0 0 85.12 92.46" width="250px" version="1.1" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink">
-<style type="text/css">
- .st0{fill:url(#SVGID_1_);}
-</style>
-<linearGradient id="SVGID_1_" y2="28.783" gradientUnits="userSpaceOnUse" x2="42.562" y1="113.26" x1="42.562">
- <stop stop-color="#FFF200" offset="0"/>
- <stop stop-color="#F15A29" offset="1"/>
-</linearGradient>
-<path class="st0" d="m85.01 40.8c-0.14-1.55-0.41-3.35-0.93-5.32-0.51-1.97-1.28-4.13-2.39-6.37-1.12-2.24-2.57-4.57-4.47-6.82-0.74-0.88-1.54-1.76-2.42-2.6 1.3-5.17-1.59-9.65-1.59-9.65-4.98-0.31-8.14 1.54-9.31 2.39-0.2-0.08-0.39-0.17-0.59-0.25-0.85-0.34-1.72-0.66-2.61-0.95-0.89-0.28-1.81-0.54-2.74-0.76-0.94-0.22-1.89-0.4-2.86-0.55-0.17-0.03-0.34-0.05-0.51-0.07-2.18-6.95-8.41-9.85-8.41-9.85-6.95 4.41-8.27 10.57-8.27 10.57s-0.03 0.14-0.07 0.36c-0.38 0.11-0.77 0.22-1.15 0.34-0.53 0.16-1.06 0.36-1.59 0.55-0.53 0.21-1.06 0.41-1.58 0.64-1.05 0.45-2.09 0.96-3.1 1.53-0.99 0.55-1.95 1.16-2.9 1.82-0.14-0.06-0.24-0.11-0.24-0.11-9.62-3.68-18.17 0.75-18.17 0.75-0.78 10.24 3.84 16.68 4.76 17.86-0.23 0.63-0.44 1.27-0.64 1.92-0.71 2.32-1.24 4.7-1.57 7.16-0.05 0.35-0.09 0.71-0.13 1.07-8.9 4.38-11.53 13.38-11.53 13.38 7.42 8.53 16.07 9.06 16.07 9.06 0.01-0.01 0.02-0.01 0.02-0.02 1.1 1.96 2.37 3.83 3.8 5.57 0.6 0.73 1.23 1.43 1.88 2.11-2.71 7.74 0.38 14.18 0.38 14.18 8.26 0.31 13.69-3.61 14.83-4.52 0.82 0.28 1.66 0.53 2.5 0.74 2.54 0.65 5.14 1.04 7.74 1.15 0.65 0.03 1.3 0.04 1.95 0.04h0.31l0.21-0.01 0.41-0.01 0.4-0.02 0.01 0.01c3.89 5.55 10.74 6.34 10.74 6.34 4.87-5.13 5.15-10.22 5.15-11.33v-0.07-0.15s0 0 0 0c0-0.08-0.01-0.15-0.01-0.23 1.02-0.72 2-1.49 2.92-2.31 1.95-1.76 3.65-3.77 5.06-5.93 0.13-0.2 0.26-0.41 0.39-0.62 5.51 0.32 9.39-3.41 9.39-3.41-0.91-5.74-4.18-8.54-4.87-9.07 0 0-0.03-0.02-0.07-0.05s-0.06-0.05-0.06-0.05c-0.04-0.02-0.08-0.05-0.12-0.08 0.03-0.35 0.06-0.69 0.08-1.04 0.04-0.62 0.06-1.24 0.06-1.85v-0.46-0.23-0.12-0.16l-0.02-0.38-0.03-0.52c-0.01-0.18-0.02-0.34-0.04-0.5-0.01-0.16-0.03-0.32-0.05-0.48l-0.06-0.48-0.07-0.47c-0.09-0.63-0.21-1.26-0.36-1.88-0.58-2.47-1.54-4.82-2.82-6.93s-2.86-3.98-4.65-5.56-3.79-2.85-5.9-3.79c-2.1-0.95-4.31-1.55-6.51-1.83-1.1-0.14-2.2-0.2-3.28-0.19l-0.41 0.01h-0.1-0.14l-0.17 0.01-0.4 0.03c-0.15 0.01-0.31 0.02-0.45 0.04-0.56 0.05-1.11 0.13-1.66 0.23-2.18 0.41-4.24 1.2-6.06 2.28-1.82 1.09-3.39 2.45-4.68 3.98-1.28 1.54-2.28 3.24-2.96 5-0.69 1.76-1.07 3.58-1.18 5.35-0.03 0.44-0.04 0.88-0.03 1.32 0 0.11 0 0.22 0.01 0.33l0.01 0.35c0.02 0.21 0.03 0.42 0.05 0.63 0.09 0.9 0.25 1.75 0.49 2.58 0.48 1.66 1.25 3.15 2.2 4.43s2.08 2.33 3.28 3.15 2.49 1.41 3.76 1.79 2.54 0.54 3.74 0.53c0.15 0 0.3 0 0.44-0.01 0.08 0 0.16-0.01 0.24-0.01s0.16-0.01 0.24-0.01c0.13-0.01 0.25-0.03 0.38-0.04 0.03 0 0.07-0.01 0.11-0.01l0.12-0.02c0.08-0.01 0.15-0.02 0.23-0.03 0.16-0.02 0.29-0.05 0.43-0.08s0.28-0.05 0.42-0.09c0.27-0.06 0.54-0.14 0.8-0.22 0.52-0.17 1.01-0.38 1.46-0.61s0.87-0.5 1.26-0.77c0.11-0.08 0.22-0.16 0.33-0.25 0.42-0.33 0.48-0.94 0.15-1.35-0.29-0.36-0.79-0.45-1.19-0.23-0.1 0.05-0.2 0.11-0.3 0.16-0.35 0.17-0.71 0.32-1.09 0.45-0.39 0.12-0.79 0.22-1.2 0.29-0.21 0.03-0.42 0.06-0.63 0.08-0.11 0.01-0.21 0.02-0.32 0.02s-0.22 0.01-0.32 0.01-0.21 0-0.31-0.01c-0.13-0.01-0.26-0.01-0.39-0.02h-0.01-0.04l-0.09 0.02c-0.06-0.01-0.12-0.01-0.17-0.02-0.12-0.01-0.23-0.03-0.35-0.04-0.93-0.13-1.88-0.4-2.79-0.82-0.91-0.41-1.79-0.98-2.57-1.69-0.79-0.71-1.48-1.56-2.01-2.52-0.54-0.96-0.92-2.03-1.09-3.16-0.09-0.56-0.13-1.14-0.11-1.71 0.01-0.16 0.01-0.31 0.02-0.47v-0.03-0.06l0.01-0.12c0.01-0.08 0.01-0.15 0.02-0.23 0.03-0.31 0.08-0.62 0.13-0.92 0.43-2.45 1.65-4.83 3.55-6.65 0.47-0.45 0.98-0.87 1.53-1.25 0.55-0.37 1.12-0.7 1.73-0.98 0.6-0.28 1.23-0.5 1.88-0.68 0.65-0.17 1.31-0.29 1.98-0.35 0.34-0.03 0.67-0.04 1.01-0.04h0.23l0.27 0.01 0.17 0.01h0.03 0.07l0.27 0.02c0.73 0.06 1.46 0.16 2.17 0.32 1.43 0.32 2.83 0.85 4.13 1.57 2.6 1.44 4.81 3.69 6.17 6.4 0.69 1.35 1.16 2.81 1.4 4.31 0.06 0.38 0.1 0.76 0.13 1.14l0.02 0.29 0.01 0.29c0.01 0.1 0.01 0.19 0.01 0.29 0 0.09 0.01 0.2 0 0.27v0.25l-0.01 0.28c-0.01 0.19-0.02 0.49-0.03 0.67-0.03 0.42-0.07 0.83-0.12 1.24s-0.12 0.82-0.19 1.22c-0.08 0.4-0.17 0.81-0.27 1.21-0.2 0.8-0.46 1.59-0.76 2.36-0.61 1.54-1.42 3-2.4 4.36-1.96 2.7-4.64 4.9-7.69 6.29-1.52 0.69-3.13 1.19-4.78 1.47-0.82 0.14-1.66 0.22-2.5 0.25l-0.15 0.01h-0.13-0.27-0.41-0.21-0.01-0.08c-0.45-0.01-0.9-0.03-1.34-0.07-1.79-0.13-3.55-0.45-5.27-0.95-1.71-0.49-3.38-1.16-4.95-2-3.14-1.68-5.95-3.98-8.15-6.76-1.11-1.38-2.07-2.87-2.87-4.43s-1.42-3.2-1.89-4.88c-0.46-1.68-0.75-3.39-0.86-5.12l-0.02-0.32-0.01-0.08v-0.07-0.14l-0.01-0.28v-0.07-0.1-0.2l-0.01-0.4v-0.08-0.03-0.16c0-0.21 0.01-0.42 0.01-0.63 0.03-0.85 0.1-1.73 0.21-2.61s0.26-1.76 0.44-2.63 0.39-1.74 0.64-2.59c0.49-1.71 1.1-3.36 1.82-4.92 1.44-3.12 3.34-5.88 5.61-8.09 0.57-0.55 1.16-1.08 1.77-1.57s1.25-0.95 1.9-1.37c0.65-0.43 1.32-0.82 2.02-1.18 0.34-0.19 0.7-0.35 1.05-0.52 0.18-0.08 0.36-0.16 0.53-0.24 0.18-0.08 0.36-0.16 0.54-0.23 0.72-0.3 1.46-0.56 2.21-0.8 0.19-0.06 0.38-0.11 0.56-0.17 0.19-0.06 0.38-0.1 0.57-0.16 0.38-0.11 0.76-0.2 1.14-0.29 0.19-0.05 0.39-0.08 0.58-0.13 0.19-0.04 0.38-0.08 0.58-0.12 0.19-0.04 0.39-0.07 0.58-0.11l0.29-0.05 0.29-0.04c0.2-0.03 0.39-0.06 0.59-0.09 0.22-0.04 0.44-0.05 0.66-0.09 0.18-0.02 0.48-0.06 0.65-0.08 0.14-0.01 0.28-0.03 0.41-0.04l0.28-0.03 0.14-0.01 0.16-0.01c0.22-0.01 0.44-0.03 0.66-0.04l0.33-0.02h0.02 0.07l0.14-0.01c0.19-0.01 0.38-0.02 0.56-0.03 0.75-0.02 1.5-0.02 2.24 0 1.48 0.06 2.93 0.22 4.34 0.48 2.82 0.53 5.49 1.43 7.89 2.62 2.41 1.18 4.57 2.63 6.44 4.2 0.12 0.1 0.23 0.2 0.35 0.3 0.11 0.1 0.23 0.2 0.34 0.3 0.23 0.2 0.44 0.41 0.66 0.61s0.43 0.41 0.64 0.62c0.2 0.21 0.41 0.41 0.61 0.63 0.8 0.84 1.53 1.69 2.19 2.55 1.33 1.71 2.39 3.44 3.24 5.07 0.05 0.1 0.11 0.2 0.16 0.3l0.15 0.3c0.1 0.2 0.2 0.4 0.29 0.6s0.19 0.39 0.27 0.59c0.09 0.2 0.17 0.39 0.25 0.58 0.32 0.76 0.61 1.49 0.84 2.18 0.39 1.11 0.67 2.11 0.89 2.98 0.09 0.35 0.42 0.58 0.78 0.55 0.37-0.03 0.66-0.34 0.66-0.71 0.04-0.95 0.01-2.05-0.09-3.3z"/>
-</svg>
\ No newline at end of file
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-name: osm-grafana
-summary: OSM Grafana
-description: |
- A CAAS charm to deploy OSM's Grafana.
-series:
- - kubernetes
-tags:
- - kubernetes
- - osm
- - grafana
-min-juju-version: 2.8.0
-deployment:
- type: stateless
- service: cluster
-resources:
- image:
- type: oci-image
- description: Ubuntu LTS image for Grafana
- upstream-source: "ubuntu/grafana:latest"
-requires:
- prometheus:
- interface: prometheus
- db:
- interface: mysql
- limit: 1
-peers:
- cluster:
- interface: grafana-cluster
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-mock==4.0.3
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-git+https://github.com/charmed-osm/ops-lib-charmed-osm/@master
\ No newline at end of file
+++ /dev/null
-#!/usr/bin/env python3
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-# pylint: disable=E0213
-
-from ipaddress import ip_network
-import logging
-from pathlib import Path
-import secrets
-from string import Template
-from typing import NoReturn, Optional
-from urllib.parse import urlparse
-
-from ops.main import main
-from opslib.osm.charm import CharmedOsmBase, RelationsMissing
-from opslib.osm.interfaces.grafana import GrafanaCluster
-from opslib.osm.interfaces.mysql import MysqlClient
-from opslib.osm.interfaces.prometheus import PrometheusClient
-from opslib.osm.pod import (
- ContainerV3Builder,
- FilesV3Builder,
- IngressResourceV3Builder,
- PodRestartPolicy,
- PodSpecV3Builder,
-)
-from opslib.osm.validator import ModelValidator, validator
-
-
-logger = logging.getLogger(__name__)
-
-
-class ConfigModel(ModelValidator):
- log_level: str
- port: int
- admin_user: str
- max_file_size: int
- osm_dashboards: bool
- site_url: Optional[str]
- cluster_issuer: Optional[str]
- ingress_class: Optional[str]
- ingress_whitelist_source_range: Optional[str]
- tls_secret_name: Optional[str]
- image_pull_policy: str
- security_context: bool
-
- @validator("log_level")
- def validate_log_level(cls, v):
- allowed_values = ("debug", "info", "warn", "error", "critical")
- if v not in allowed_values:
- separator = '", "'
- raise ValueError(
- f'incorrect value. Allowed values are "{separator.join(allowed_values)}"'
- )
- return v
-
- @validator("max_file_size")
- def validate_max_file_size(cls, v):
- if v < 0:
- raise ValueError("value must be equal or greater than 0")
- return v
-
- @validator("site_url")
- def validate_site_url(cls, v):
- if v:
- parsed = urlparse(v)
- if not parsed.scheme.startswith("http"):
- raise ValueError("value must start with http")
- return v
-
- @validator("ingress_whitelist_source_range")
- def validate_ingress_whitelist_source_range(cls, v):
- if v:
- ip_network(v)
- return v
-
- @validator("image_pull_policy")
- def validate_image_pull_policy(cls, v):
- values = {
- "always": "Always",
- "ifnotpresent": "IfNotPresent",
- "never": "Never",
- }
- v = v.lower()
- if v not in values.keys():
- raise ValueError("value must be always, ifnotpresent or never")
- return values[v]
-
-
-class GrafanaCharm(CharmedOsmBase):
- """GrafanaCharm Charm."""
-
- def __init__(self, *args) -> NoReturn:
- """Prometheus Charm constructor."""
- super().__init__(*args, oci_image="image", mysql_uri=True)
- # Initialize relation objects
- self.prometheus_client = PrometheusClient(self, "prometheus")
- self.grafana_cluster = GrafanaCluster(self, "cluster")
- self.mysql_client = MysqlClient(self, "db")
- # Observe events
- event_observer_mapping = {
- self.on["prometheus"].relation_changed: self.configure_pod,
- self.on["prometheus"].relation_broken: self.configure_pod,
- self.on["db"].relation_changed: self.configure_pod,
- self.on["db"].relation_broken: self.configure_pod,
- }
- for event, observer in event_observer_mapping.items():
- self.framework.observe(event, observer)
-
- def _build_dashboard_files(self, config: ConfigModel):
- files_builder = FilesV3Builder()
- files_builder.add_file(
- "dashboard_osm.yaml",
- Path("templates/default_dashboards.yaml").read_text(),
- )
- if config.osm_dashboards:
- osm_dashboards_mapping = {
- "kafka_exporter_dashboard.json": "templates/kafka_exporter_dashboard.json",
- "mongodb_exporter_dashboard.json": "templates/mongodb_exporter_dashboard.json",
- "mysql_exporter_dashboard.json": "templates/mysql_exporter_dashboard.json",
- "nodes_exporter_dashboard.json": "templates/nodes_exporter_dashboard.json",
- "summary_dashboard.json": "templates/summary_dashboard.json",
- }
- for file_name, path in osm_dashboards_mapping.items():
- files_builder.add_file(file_name, Path(path).read_text())
- return files_builder.build()
-
- def _build_datasources_files(self):
- files_builder = FilesV3Builder()
- prometheus_user = self.prometheus_client.user
- prometheus_password = self.prometheus_client.password
- enable_basic_auth = all([prometheus_user, prometheus_password])
- kwargs = {
- "prometheus_host": self.prometheus_client.hostname,
- "prometheus_port": self.prometheus_client.port,
- "enable_basic_auth": enable_basic_auth,
- "user": "",
- "password": "",
- }
- if enable_basic_auth:
- kwargs["user"] = f"basic_auth_user: {prometheus_user}"
- kwargs[
- "password"
- ] = f"secure_json_data:\n basicAuthPassword: {prometheus_password}"
- files_builder.add_file(
- "datasource_prometheus.yaml",
- Template(Path("templates/default_datasources.yaml").read_text()).substitute(
- **kwargs
- ),
- )
- return files_builder.build()
-
- def _check_missing_dependencies(self, config: ConfigModel, external_db: bool):
- missing_relations = []
-
- if self.prometheus_client.is_missing_data_in_app():
- missing_relations.append("prometheus")
-
- if not external_db and self.mysql_client.is_missing_data_in_unit():
- missing_relations.append("db")
-
- if missing_relations:
- raise RelationsMissing(missing_relations)
-
- def build_pod_spec(self, image_info, **kwargs):
- # Validate config
- config = ConfigModel(**dict(self.config))
- mysql_config = kwargs["mysql_config"]
- if mysql_config.mysql_uri and not self.mysql_client.is_missing_data_in_unit():
- raise Exception("Mysql data cannot be provided via config and relation")
-
- # Check relations
- external_db = True if mysql_config.mysql_uri else False
- self._check_missing_dependencies(config, external_db)
-
- # Get initial password
- admin_initial_password = self.grafana_cluster.admin_initial_password
- if not admin_initial_password:
- admin_initial_password = _generate_random_password()
- self.grafana_cluster.set_initial_password(admin_initial_password)
-
- # Create Builder for the PodSpec
- pod_spec_builder = PodSpecV3Builder(
- enable_security_context=config.security_context
- )
-
- # Add secrets to the pod
- grafana_secret_name = f"{self.app.name}-admin-secret"
- pod_spec_builder.add_secret(
- grafana_secret_name,
- {
- "admin-password": admin_initial_password,
- "mysql-url": mysql_config.mysql_uri or self.mysql_client.get_uri(),
- "prometheus-user": self.prometheus_client.user,
- "prometheus-password": self.prometheus_client.password,
- },
- )
-
- # Build Container
- container_builder = ContainerV3Builder(
- self.app.name,
- image_info,
- config.image_pull_policy,
- run_as_non_root=config.security_context,
- )
- container_builder.add_port(name=self.app.name, port=config.port)
- container_builder.add_http_readiness_probe(
- "/api/health",
- config.port,
- initial_delay_seconds=10,
- period_seconds=10,
- timeout_seconds=5,
- failure_threshold=3,
- )
- container_builder.add_http_liveness_probe(
- "/api/health",
- config.port,
- initial_delay_seconds=60,
- timeout_seconds=30,
- failure_threshold=10,
- )
- container_builder.add_volume_config(
- "dashboards",
- "/etc/grafana/provisioning/dashboards/",
- self._build_dashboard_files(config),
- )
- container_builder.add_volume_config(
- "datasources",
- "/etc/grafana/provisioning/datasources/",
- self._build_datasources_files(),
- )
- container_builder.add_envs(
- {
- "GF_SERVER_HTTP_PORT": config.port,
- "GF_LOG_LEVEL": config.log_level,
- "GF_SECURITY_ADMIN_USER": config.admin_user,
- }
- )
- container_builder.add_secret_envs(
- secret_name=grafana_secret_name,
- envs={
- "GF_SECURITY_ADMIN_PASSWORD": "admin-password",
- "GF_DATABASE_URL": "mysql-url",
- "PROMETHEUS_USER": "prometheus-user",
- "PROMETHEUS_PASSWORD": "prometheus-password",
- },
- )
- container = container_builder.build()
- pod_spec_builder.add_container(container)
-
- # Add Pod restart policy
- restart_policy = PodRestartPolicy()
- restart_policy.add_secrets(secret_names=(grafana_secret_name,))
- pod_spec_builder.set_restart_policy(restart_policy)
-
- # Add ingress resources to pod spec if site url exists
- if config.site_url:
- parsed = urlparse(config.site_url)
- annotations = {
- "nginx.ingress.kubernetes.io/proxy-body-size": "{}".format(
- str(config.max_file_size) + "m"
- if config.max_file_size > 0
- else config.max_file_size
- )
- }
- if config.ingress_class:
- annotations["kubernetes.io/ingress.class"] = config.ingress_class
- ingress_resource_builder = IngressResourceV3Builder(
- f"{self.app.name}-ingress", annotations
- )
-
- if config.ingress_whitelist_source_range:
- annotations[
- "nginx.ingress.kubernetes.io/whitelist-source-range"
- ] = config.ingress_whitelist_source_range
-
- if config.cluster_issuer:
- annotations["cert-manager.io/cluster-issuer"] = config.cluster_issuer
-
- if parsed.scheme == "https":
- ingress_resource_builder.add_tls(
- [parsed.hostname], config.tls_secret_name
- )
- else:
- annotations["nginx.ingress.kubernetes.io/ssl-redirect"] = "false"
-
- ingress_resource_builder.add_rule(
- parsed.hostname, self.app.name, config.port
- )
- ingress_resource = ingress_resource_builder.build()
- pod_spec_builder.add_ingress_resource(ingress_resource)
- return pod_spec_builder.build()
-
-
-def _generate_random_password():
- return secrets.token_hex(16)
-
-
-if __name__ == "__main__":
- main(GrafanaCharm)
+++ /dev/null
-#!/usr/bin/env python3
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-import logging
-from ipaddress import ip_network
-from typing import Any, Dict, List
-from urllib.parse import urlparse
-from pathlib import Path
-from string import Template
-
-logger = logging.getLogger(__name__)
-
-
-def _validate_max_file_size(max_file_size: int, site_url: str) -> bool:
- """Validate max_file_size.
-
- Args:
- max_file_size (int): maximum file size allowed.
- site_url (str): endpoint url.
-
- Returns:
- bool: True if valid, false otherwise.
- """
- if not site_url:
- return True
-
- parsed = urlparse(site_url)
-
- if not parsed.scheme.startswith("http"):
- return True
-
- if max_file_size is None:
- return False
-
- return max_file_size >= 0
-
-
-def _validate_ip_network(network: str) -> bool:
- """Validate IP network.
-
- Args:
- network (str): IP network range.
-
- Returns:
- bool: True if valid, false otherwise.
- """
- if not network:
- return True
-
- try:
- ip_network(network)
- except ValueError:
- return False
-
- return True
-
-
-def _validate_data(config_data: Dict[str, Any], relation_data: Dict[str, Any]) -> bool:
- """Validates passed information.
-
- Args:
- config_data (Dict[str, Any]): configuration information.
- relation_data (Dict[str, Any]): relation information
-
- Raises:
- ValueError: when config and/or relation data is not valid.
- """
- config_validators = {
- "site_url": lambda value, _: isinstance(value, str)
- if value is not None
- else True,
- "max_file_size": lambda value, values: _validate_max_file_size(
- value, values.get("site_url")
- ),
- "ingress_whitelist_source_range": lambda value, _: _validate_ip_network(value),
- "tls_secret_name": lambda value, _: isinstance(value, str)
- if value is not None
- else True,
- }
- relation_validators = {
- "prometheus_hostname": lambda value, _: (
- isinstance(value, str) and len(value) > 0
- ),
- "prometheus_port": lambda value, _: (
- isinstance(value, str) and len(value) > 0 and int(value) > 0
- ),
- }
- problems = []
-
- for key, validator in config_validators.items():
- valid = validator(config_data.get(key), config_data)
-
- if not valid:
- problems.append(key)
-
- for key, validator in relation_validators.items():
- valid = validator(relation_data.get(key), relation_data)
-
- if not valid:
- problems.append(key)
-
- if len(problems) > 0:
- logger.debug(relation_data)
- raise ValueError("Errors found in: {}".format(", ".join(problems)))
-
- return True
-
-
-def _make_pod_ports(port: int) -> List[Dict[str, Any]]:
- """Generate pod ports details.
-
- Args:
- port (int): port to expose.
-
- Returns:
- List[Dict[str, Any]]: pod port details.
- """
- return [{"name": "grafana", "containerPort": port, "protocol": "TCP"}]
-
-
-def _make_pod_envconfig(
- config: Dict[str, Any], relation_state: Dict[str, Any]
-) -> Dict[str, Any]:
- """Generate pod environment configuration.
-
- Args:
- config (Dict[str, Any]): configuration information.
- relation_state (Dict[str, Any]): relation state information.
-
- Returns:
- Dict[str, Any]: pod environment configuration.
- """
- envconfig = {}
-
- return envconfig
-
-
-def _make_pod_ingress_resources(
- config: Dict[str, Any], app_name: str, port: int
-) -> List[Dict[str, Any]]:
- """Generate pod ingress resources.
-
- Args:
- config (Dict[str, Any]): configuration information.
- app_name (str): application name.
- port (int): port to expose.
-
- Returns:
- List[Dict[str, Any]]: pod ingress resources.
- """
- site_url = config.get("site_url")
-
- if not site_url:
- return
-
- parsed = urlparse(site_url)
-
- if not parsed.scheme.startswith("http"):
- return
-
- max_file_size = config["max_file_size"]
- ingress_whitelist_source_range = config["ingress_whitelist_source_range"]
-
- annotations = {
- "nginx.ingress.kubernetes.io/proxy-body-size": "{}".format(
- str(max_file_size) + "m" if max_file_size > 0 else max_file_size
- ),
- }
-
- if ingress_whitelist_source_range:
- annotations[
- "nginx.ingress.kubernetes.io/whitelist-source-range"
- ] = ingress_whitelist_source_range
-
- ingress_spec_tls = None
-
- if parsed.scheme == "https":
- ingress_spec_tls = [{"hosts": [parsed.hostname]}]
- tls_secret_name = config["tls_secret_name"]
- if tls_secret_name:
- ingress_spec_tls[0]["secretName"] = tls_secret_name
- else:
- annotations["nginx.ingress.kubernetes.io/ssl-redirect"] = "false"
-
- ingress = {
- "name": "{}-ingress".format(app_name),
- "annotations": annotations,
- "spec": {
- "rules": [
- {
- "host": parsed.hostname,
- "http": {
- "paths": [
- {
- "path": "/",
- "backend": {
- "serviceName": app_name,
- "servicePort": port,
- },
- }
- ]
- },
- }
- ]
- },
- }
- if ingress_spec_tls:
- ingress["spec"]["tls"] = ingress_spec_tls
-
- return [ingress]
-
-
-def _make_pod_files(
- config: Dict[str, Any], relation: Dict[str, Any]
-) -> List[Dict[str, Any]]:
- """Generating ConfigMap information
-
- Args:
- config (Dict[str, Any]): configuration information.
- relation (Dict[str, Any]): relation information.
-
- Returns:
- List[Dict[str, Any]]: ConfigMap information.
- """
- template_data = {**config, **relation}
- dashboards = []
-
- if config.get("osm_dashboards", False):
- dashboards.extend(
- [
- {
- "path": "kafka_exporter_dashboard.json",
- "content": Path("files/kafka_exporter_dashboard.json").read_text(),
- },
- {
- "path": "mongodb_exporter_dashboard.json",
- "content": Path(
- "files/mongodb_exporter_dashboard.json"
- ).read_text(),
- },
- {
- "path": "mysql_exporter_dashboard.json",
- "content": Path("files/mysql_exporter_dashboard.json").read_text(),
- },
- {
- "path": "nodes_exporter_dashboard.json",
- "content": Path("files/nodes_exporter_dashboard.json").read_text(),
- },
- {
- "path": "summary_dashboard.json",
- "content": Path("files/summary_dashboard.json").read_text(),
- },
- ]
- )
-
- dashboards.append(
- {
- "path": "dashboard_osm.yaml",
- "content": Path("files/default_dashboards.yaml").read_text(),
- }
- )
-
- files = [
- {
- "name": "dashboards",
- "mountPath": "/etc/grafana/provisioning/dashboards/",
- "files": dashboards,
- },
- {
- "name": "datasources",
- "mountPath": "/etc/grafana/provisioning/datasources/",
- "files": [
- {
- "path": "datasource_prometheus.yaml",
- "content": Template(
- Path("files/default_dashboards.yaml").read_text()
- ).substitute(template_data),
- }
- ],
- },
- ]
-
- return files
-
-
-def _make_readiness_probe(port: int) -> Dict[str, Any]:
- """Generate readiness probe.
-
- Args:
- port (int): service port.
-
- Returns:
- Dict[str, Any]: readiness probe.
- """
- return {
- "httpGet": {
- "path": "/api/health",
- "port": port,
- },
- "initialDelaySeconds": 10,
- "periodSeconds": 10,
- "timeoutSeconds": 5,
- "successThreshold": 1,
- "failureThreshold": 3,
- }
-
-
-def _make_liveness_probe(port: int) -> Dict[str, Any]:
- """Generate liveness probe.
-
- Args:
- port (int): service port.
-
- Returns:
- Dict[str, Any]: liveness probe.
- """
- return {
- "httpGet": {
- "path": "/api/health",
- "port": port,
- },
- "initialDelaySeconds": 60,
- "timeoutSeconds": 30,
- "failureThreshold": 10,
- }
-
-
-def make_pod_spec(
- image_info: Dict[str, str],
- config: Dict[str, Any],
- relation_state: Dict[str, Any],
- app_name: str = "grafana",
- port: int = 3000,
-) -> Dict[str, Any]:
- """Generate the pod spec information.
-
- Args:
- image_info (Dict[str, str]): Object provided by
- OCIImageResource("image").fetch().
- config (Dict[str, Any]): Configuration information.
- relation_state (Dict[str, Any]): Relation state information.
- app_name (str, optional): Application name. Defaults to "ro".
- port (int, optional): Port for the container. Defaults to 9090.
-
- Returns:
- Dict[str, Any]: Pod spec dictionary for the charm.
- """
- if not image_info:
- return None
-
- _validate_data(config, relation_state)
-
- ports = _make_pod_ports(port)
- env_config = _make_pod_envconfig(config, relation_state)
- files = _make_pod_files(config, relation_state)
- readiness_probe = _make_readiness_probe(port)
- liveness_probe = _make_liveness_probe(port)
- ingress_resources = _make_pod_ingress_resources(config, app_name, port)
-
- return {
- "version": 3,
- "containers": [
- {
- "name": app_name,
- "imageDetails": image_info,
- "imagePullPolicy": "Always",
- "ports": ports,
- "envConfig": env_config,
- "volumeConfig": files,
- "kubernetes": {
- "readinessProbe": readiness_probe,
- "livenessProbe": liveness_probe,
- },
- }
- ],
- "kubernetesResources": {
- "ingressResources": ingress_resources or [],
- },
- }
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
----
-apiVersion: 1
-providers:
- - name: 'osm'
- orgId: 1
- folder: ''
- type: file
- options:
- path: /etc/grafana/provisioning/dashboards/
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
----
-datasources:
- - access: proxy
- editable: true
- is_default: true
- name: osm_prometheus
- orgId: 1
- type: prometheus
- version: 1
- url: http://$prometheus_host:$prometheus_port
- basic_auth: $enable_basic_auth
- $user
- $password
+++ /dev/null
-{
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "Kafka resource usage and throughput",
- "editable": true,
- "gnetId": 7589,
- "graphTooltip": 0,
- "id": 10,
- "iteration": 1578848023483,
- "links": [],
- "panels": [
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 0,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 10,
- "x": 0,
- "y": 0
- },
- "id": 14,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": 480,
- "sort": "max",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "connected",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(kafka_topic_partition_current_offset - kafka_topic_partition_oldest_offset{instance=\"$instance\", topic=~\"$topic\"}) by (topic)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{topic}}",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Messages stored per topic",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": "0",
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 0,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 10,
- "x": 10,
- "y": 0
- },
- "id": 12,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": 480,
- "sort": "max",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "connected",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(kafka_consumergroup_lag{instance=\"$instance\",topic=~\"$topic\"}) by (consumergroup, topic) ",
- "format": "time_series",
- "instant": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": " {{topic}} ({{consumergroup}})",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Lag by Consumer Group",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": "",
- "logBase": 1,
- "max": null,
- "min": "0",
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 0,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 10,
- "x": 0,
- "y": 10
- },
- "id": 16,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": 480,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "connected",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(delta(kafka_topic_partition_current_offset{instance=~'$instance', topic=~\"$topic\"}[5m])/5) by (topic)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{topic}}",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Messages produced per minute",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 0,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 10,
- "x": 10,
- "y": 10
- },
- "id": 18,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": 480,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "connected",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(delta(kafka_consumergroup_current_offset{instance=~'$instance',topic=~\"$topic\"}[5m])/5) by (consumergroup, topic)",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": " {{topic}} ({{consumergroup}})",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Messages consumed per minute",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": true,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 7,
- "w": 20,
- "x": 0,
- "y": 20
- },
- "id": 8,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": true,
- "show": true,
- "sideWidth": 420,
- "total": false,
- "values": true
- },
- "lines": false,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum by(topic) (kafka_topic_partitions{instance=\"$instance\",topic=~\"$topic\"})",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{topic}}",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Partitions per Topic",
- "tooltip": {
- "shared": false,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "series",
- "name": null,
- "show": false,
- "values": [
- "current"
- ]
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "refresh": "5s",
- "schemaVersion": 19,
- "style": "dark",
- "tags": [],
- "templating": {
- "list": [
- {
- "allValue": null,
- "current": {
- "text": "osm-kafka-exporter-service",
- "value": "osm-kafka-exporter-service"
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "",
- "hide": 0,
- "includeAll": false,
- "label": "Job",
- "multi": false,
- "name": "job",
- "options": [],
- "query": "label_values(kafka_consumergroup_current_offset, job)",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "datasource": "prometheus - Juju generated source",
- "definition": "",
- "hide": 0,
- "includeAll": false,
- "label": "Instance",
- "multi": false,
- "name": "instance",
- "options": [],
- "query": "label_values(kafka_consumergroup_current_offset{job=~\"$job\"}, instance)",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "current": {
- "tags": [],
- "text": "All",
- "value": [
- "$__all"
- ]
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "",
- "hide": 0,
- "includeAll": true,
- "label": "Topic",
- "multi": true,
- "name": "topic",
- "options": [],
- "query": "label_values(kafka_topic_partition_current_offset{instance='$instance',topic!='__consumer_offsets',topic!='--kafka'}, topic)",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "topic",
- "type": "query",
- "useTags": false
- }
- ]
- },
- "time": {
- "from": "now-1h",
- "to": "now"
- },
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
- "timezone": "browser",
- "title": "Kafka",
- "uid": "jwPKIsniz",
- "version": 2
-}
+++ /dev/null
-{
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "MongoDB Prometheus Exporter Dashboard.",
- "editable": true,
- "gnetId": 2583,
- "graphTooltip": 1,
- "id": 1,
- "iteration": 1615141074039,
- "links": [],
- "panels": [
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 22,
- "panels": [],
- "repeat": "env",
- "title": "Health",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": true,
- "colors": [
- "rgba(245, 54, 54, 0.9)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(50, 172, 45, 0.97)"
- ],
- "datasource": "prometheus - Juju generated source",
- "decimals": null,
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "s",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 4,
- "w": 12,
- "x": 0,
- "y": 1
- },
- "id": 10,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "mongodb_ss_uptime{}",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "",
- "refId": "A",
- "step": 1800
- }
- ],
- "thresholds": "0,360",
- "title": "Uptime",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "rgba(245, 54, 54, 0.9)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(50, 172, 45, 0.97)"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 4,
- "w": 12,
- "x": 12,
- "y": 1
- },
- "id": 1,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": true,
- "lineColor": "rgb(31, 120, 193)",
- "show": true
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "mongodb_ss_connections{conn_type=\"current\"}",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "",
- "metric": "mongodb_connections",
- "refId": "A",
- "step": 1800
- }
- ],
- "thresholds": "",
- "title": "Open Connections",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "avg"
- },
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 5
- },
- "id": 20,
- "panels": [],
- "repeat": "env",
- "title": "Operations",
- "type": "row"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 6,
- "w": 10,
- "x": 0,
- "y": 6
- },
- "hiddenSeries": false,
- "id": 7,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(mongodb_ss_opcounters[$interval])",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "{{legacy_op_type}}",
- "refId": "A",
- "step": 240
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Query Operations",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:670",
- "format": "ops",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:671",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 6,
- "w": 8,
- "x": 10,
- "y": 6
- },
- "hiddenSeries": false,
- "id": 9,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "returned",
- "yaxis": 1
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(mongodb_ss_metrics_document[$interval])",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "{{doc_op_type}}",
- "refId": "A",
- "step": 240
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Document Operations",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:699",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:700",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 6,
- "w": 6,
- "x": 18,
- "y": 6
- },
- "hiddenSeries": false,
- "id": 8,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(mongodb_ss_opcounters[$interval])",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "{{legacy_op_type}}",
- "refId": "A",
- "step": 600
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Document Query Executor",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:728",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:729",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 12
- },
- "id": 23,
- "panels": [],
- "repeat": null,
- "title": "Resources",
- "type": "row"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 6,
- "w": 12,
- "x": 0,
- "y": 13
- },
- "hiddenSeries": false,
- "id": 4,
- "legend": {
- "alignAsTable": false,
- "avg": false,
- "current": true,
- "hideEmpty": false,
- "hideZero": false,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "mongodb_ss_mem_resident",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "Resident",
- "refId": "A",
- "step": 240
- },
- {
- "expr": "mongodb_ss_mem_virtual",
- "hide": false,
- "interval": "",
- "legendFormat": "Virtual",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Memory",
- "tooltip": {
- "shared": false,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": [
- "total"
- ]
- },
- "yaxes": [
- {
- "$$hashKey": "object:523",
- "format": "decmbytes",
- "label": "",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:524",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 6,
- "w": 12,
- "x": 12,
- "y": 13
- },
- "hiddenSeries": false,
- "id": 5,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "rate(mongodb_ss_network_bytesOut[$interval])",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "Out",
- "metric": "mongodb_metrics_operation_total",
- "refId": "A",
- "step": 240
- },
- {
- "expr": "rate(mongodb_ss_network_bytesIn[$interval])",
- "hide": false,
- "interval": "",
- "intervalFactor": 2,
- "legendFormat": "In",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Network I/O",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:579",
- "format": "decbytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:580",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "refresh": "5s",
- "schemaVersion": 27,
- "style": "dark",
- "tags": [],
- "templating": {
- "list": [
- {
- "allValue": null,
- "current": {
- "selected": true,
- "text": [
- "All"
- ],
- "value": [
- "$__all"
- ]
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "",
- "description": null,
- "error": null,
- "hide": 0,
- "includeAll": true,
- "label": "instance",
- "multi": true,
- "name": "instance",
- "options": [],
- "query": {
- "query": "label_values(mongodb_connections, instance)",
- "refId": "prometheus - Juju generated source-instance-Variable-Query"
- },
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "/.*-(.*?)-.*/",
- "tags": [],
- "tagsQuery": "label_values(mongodb_connections, instance)",
- "type": "query",
- "useTags": false
- },
- {
- "auto": true,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "selected": false,
- "text": "auto",
- "value": "$__auto_interval_interval"
- },
- "description": null,
- "error": null,
- "hide": 0,
- "label": null,
- "name": "interval",
- "options": [
- {
- "selected": true,
- "text": "auto",
- "value": "$__auto_interval_interval"
- },
- {
- "selected": false,
- "text": "1m",
- "value": "1m"
- },
- {
- "selected": false,
- "text": "10m",
- "value": "10m"
- },
- {
- "selected": false,
- "text": "30m",
- "value": "30m"
- },
- {
- "selected": false,
- "text": "1h",
- "value": "1h"
- },
- {
- "selected": false,
- "text": "6h",
- "value": "6h"
- },
- {
- "selected": false,
- "text": "12h",
- "value": "12h"
- },
- {
- "selected": false,
- "text": "1d",
- "value": "1d"
- },
- {
- "selected": false,
- "text": "7d",
- "value": "7d"
- },
- {
- "selected": false,
- "text": "14d",
- "value": "14d"
- },
- {
- "selected": false,
- "text": "30d",
- "value": "30d"
- }
- ],
- "query": "1m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
- "refresh": 2,
- "skipUrlSync": false,
- "type": "interval"
- }
- ]
- },
- "time": {
- "from": "now/d",
- "to": "now"
- },
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
- "timezone": "browser",
- "title": "MongoDB",
- "uid": "HEK4NbtZk",
- "version": 17
-}
\ No newline at end of file
+++ /dev/null
-{
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "Mysql dashboard",
- "editable": true,
- "gnetId": 6239,
- "graphTooltip": 0,
- "id": 34,
- "iteration": 1569307668513,
- "links": [],
- "panels": [
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 17,
- "panels": [],
- "title": "Global status",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "colorBackground": true,
- "colorValue": false,
- "colors": [
- "#bf1b00",
- "#508642",
- "#ef843c"
- ],
- "datasource": "prometheus - Juju generated source",
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 7,
- "w": 6,
- "x": 0,
- "y": 1
- },
- "id": 11,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "options": {},
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": true,
- "lineColor": "rgb(31, 120, 193)",
- "show": true
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "mysql_up{release=\"$release\"}",
- "format": "time_series",
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": "1,2",
- "title": "Instance Up",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": true,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#508642"
- ],
- "datasource": "prometheus - Juju generated source",
- "format": "s",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 7,
- "w": 6,
- "x": 6,
- "y": 1
- },
- "id": 15,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "options": {},
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": true
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "mysql_global_status_uptime{release=\"$release\"}",
- "format": "time_series",
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": "25200,32400",
- "title": "Uptime",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 7,
- "w": 12,
- "x": 12,
- "y": 1
- },
- "id": 29,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "mysql_global_status_max_used_connections{release=\"$release\"}",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "current",
- "refId": "A"
- },
- {
- "expr": "mysql_global_variables_max_connections{release=\"$release\"}",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "Max",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Mysql Connections",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 8
- },
- "id": 19,
- "panels": [],
- "title": "I/O",
- "type": "row"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 9
- },
- "id": 5,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "write",
- "transform": "negative-Y"
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "irate(mysql_global_status_innodb_data_reads{release=\"$release\"}[10m])",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "reads",
- "refId": "A"
- },
- {
- "expr": "irate(mysql_global_status_innodb_data_writes{release=\"$release\"}[10m])",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "write",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "mysql disk reads vs writes",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 9
- },
- "id": 9,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "/sent/",
- "transform": "negative-Y"
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "irate(mysql_global_status_bytes_received{release=\"$release\"}[5m])",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "received",
- "refId": "A"
- },
- {
- "expr": "irate(mysql_global_status_bytes_sent{release=\"$release\"}[5m])",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "sent",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "mysql network received vs sent",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 7,
- "w": 12,
- "x": 0,
- "y": 18
- },
- "id": 2,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "irate(mysql_global_status_commands_total{release=\"$release\"}[5m]) > 0",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "{{ command }} - {{ release }}",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Query rates",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 7,
- "w": 12,
- "x": 12,
- "y": 18
- },
- "id": 25,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "mysql_global_status_threads_running{release=\"$release\"} ",
- "format": "time_series",
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Running Threads",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "decimals": null,
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": "15",
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 25
- },
- "id": 21,
- "panels": [],
- "title": "Errors",
- "type": "row"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "description": "The number of connections that were aborted because the client died without closing the connection properly.",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 26
- },
- "id": 13,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "mysql_global_status_aborted_clients{release=\"$release\"}",
- "format": "time_series",
- "intervalFactor": 1,
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Aborted clients",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "description": "The number of failed attempts to connect to the MySQL server.",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 26
- },
- "id": 4,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "mysql_global_status_aborted_connects{release=\"$release\"}",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "mysql aborted Connects",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 35
- },
- "id": 23,
- "panels": [],
- "title": "Disk usage",
- "type": "row"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 36
- },
- "id": 27,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(mysql_info_schema_table_size{component=\"data_length\",release=\"$release\"})",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "Tables",
- "refId": "A"
- },
- {
- "expr": "sum(mysql_info_schema_table_size{component=\"index_length\",release=\"$release\"})",
- "format": "time_series",
- "intervalFactor": 1,
- "legendFormat": "Indexes",
- "refId": "B"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Disk usage tables / indexes",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "decbytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 36
- },
- "id": 7,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": false,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "dataLinks": []
- },
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(mysql_info_schema_table_rows{release=\"$release\"})",
- "format": "time_series",
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Sum of all rows",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "decimals": null,
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "schemaVersion": 19,
- "style": "dark",
- "tags": [
- ],
- "templating": {
- "list": [
- {
- "allValue": null,
- "current": {
- "isNone": true,
- "text": "None",
- "value": ""
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "",
- "hide": 0,
- "includeAll": false,
- "label": null,
- "multi": false,
- "name": "release",
- "options": [],
- "query": "label_values(mysql_up,release)",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- }
- ]
- },
- "time": {
- "from": "now-1h",
- "to": "now"
- },
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
- "timezone": "",
- "title": "Mysql",
- "uid": "6-kPlS7ik",
- "version": 1
-}
+++ /dev/null
-{
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "Physical nodes dashboard",
- "editable": true,
- "gnetId": 11074,
- "graphTooltip": 0,
- "id": 4,
- "iteration": 1615160452938,
- "links": [],
- "panels": [
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 179,
- "panels": [],
- "title": "Summary",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorPostfix": false,
- "colorPrefix": false,
- "colorValue": true,
- "colors": [
- "rgba(245, 54, 54, 0.9)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(50, 172, 45, 0.97)"
- ],
- "datasource": "prometheus - Juju generated source",
- "decimals": 1,
- "description": "",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "s",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 6,
- "w": 2,
- "x": 0,
- "y": 1
- },
- "hideTimeOverride": true,
- "id": 15,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "null",
- "nullText": null,
- "pluginVersion": "6.4.2",
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "max(system_uptime)",
- "format": "time_series",
- "hide": false,
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A",
- "step": 40
- }
- ],
- "thresholds": "1,2",
- "title": "System Uptime",
- "type": "singlestat",
- "valueFontSize": "70%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorPostfix": false,
- "colorValue": true,
- "colors": [
- "rgba(245, 54, 54, 0.9)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(50, 172, 45, 0.97)"
- ],
- "datasource": "prometheus - Juju generated source",
- "description": "",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "short",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 6,
- "w": 2,
- "x": 2,
- "y": 1
- },
- "id": 14,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "maxPerRow": 6,
- "nullPointMode": "null",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(system_n_cpus)",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A",
- "step": 20
- }
- ],
- "thresholds": "1,2",
- "title": "CPU Cores",
- "type": "singlestat",
- "valueFontSize": "70%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": true,
- "colors": [
- "rgba(245, 54, 54, 0.9)",
- "rgba(237, 129, 40, 0.89)",
- "rgba(50, 172, 45, 0.97)"
- ],
- "datasource": "prometheus - Juju generated source",
- "decimals": 2,
- "description": "",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "bytes",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 6,
- "w": 2,
- "x": 4,
- "y": 1
- },
- "id": 75,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "maxPerRow": 6,
- "nullPointMode": "null",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "70%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(mem_total)",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A",
- "step": 20
- }
- ],
- "thresholds": "2,3",
- "title": "Total RAM",
- "type": "singlestat",
- "valueFontSize": "70%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "custom": {},
- "displayName": "",
- "mappings": [
- {
- "from": "",
- "id": 1,
- "operator": "",
- "text": "-",
- "to": "",
- "type": 1,
- "value": "NaN"
- }
- ],
- "max": 100,
- "min": 0,
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "#EAB839",
- "value": 60
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- },
- "unit": "percent"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 6,
- "w": 18,
- "x": 6,
- "y": 1
- },
- "id": 177,
- "options": {
- "displayMode": "lcd",
- "orientation": "horizontal",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showUnfilled": true,
- "text": {}
- },
- "pluginVersion": "7.4.3",
- "targets": [
- {
- "expr": "avg(irate(cpu_usage_system[$__rate_interval]) + irate(cpu_usage_user[$__rate_interval])) * 100",
- "hide": false,
- "instant": true,
- "interval": "",
- "legendFormat": "CPU Busy",
- "refId": "A"
- },
- {
- "expr": "avg(irate(cpu_usage_iowait[$__rate_interval])) * 100",
- "hide": false,
- "instant": true,
- "interval": "",
- "legendFormat": "Busy Iowait",
- "refId": "C"
- },
- {
- "expr": "avg(mem_used_percent)",
- "instant": true,
- "interval": "",
- "legendFormat": "Used RAM Memory",
- "refId": "B"
- },
- {
- "expr": "avg(disk_used_percent{fstype=\"ext4\"})",
- "hide": false,
- "instant": true,
- "interval": "",
- "legendFormat": "Used Max Mount($maxmount)",
- "refId": "D"
- },
- {
- "expr": "avg(swap_used_percent)",
- "instant": true,
- "interval": "",
- "legendFormat": "Used SWAP",
- "refId": "E"
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "",
- "type": "bargauge"
- },
- {
- "collapsed": true,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 7
- },
- "id": 181,
- "panels": [
- {
- "aliasColors": {
- "15分钟": "#6ED0E0",
- "1分钟": "#BF1B00",
- "5分钟": "#CCA300"
- },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "editable": true,
- "error": false,
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 1,
- "grid": {},
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 2
- },
- "height": "300",
- "hiddenSeries": false,
- "id": 13,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [],
- "maxPerRow": 6,
- "nullPointMode": "null as zero",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "system_load1",
- "format": "time_series",
- "instant": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_1m",
- "metric": "",
- "refId": "A",
- "step": 20,
- "target": ""
- },
- {
- "expr": "system_load5",
- "format": "time_series",
- "instant": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_5m",
- "refId": "B",
- "step": 20
- },
- {
- "expr": "system_load15",
- "format": "time_series",
- "instant": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_15m",
- "refId": "C",
- "step": 20
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "System Load",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 2,
- "value_type": "cumulative"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {
- "192.168.200.241:9100_Total": "dark-red",
- "Idle - Waiting for something to happen": "#052B51",
- "guest": "#9AC48A",
- "idle": "#052B51",
- "iowait": "#EAB839",
- "irq": "#BF1B00",
- "nice": "#C15C17",
- "softirq": "#E24D42",
- "steal": "#FCE2DE",
- "system": "#508642",
- "user": "#5195CE"
- },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "decimals": 2,
- "description": "",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 2
- },
- "hiddenSeries": false,
- "id": 7,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [],
- "maxPerRow": 6,
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "repeat": null,
- "seriesOverrides": [
- {
- "alias": "/.*_Total/",
- "color": "#C4162A",
- "fill": 0
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "avg(irate(cpu_usage_system[30m])) by (juju_unit)",
- "format": "time_series",
- "hide": false,
- "instant": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_System",
- "refId": "A",
- "step": 20
- },
- {
- "expr": "avg(irate(cpu_usage_user[30m])) by (juju_unit)",
- "format": "time_series",
- "hide": false,
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_User",
- "refId": "B",
- "step": 240
- },
- {
- "expr": "avg(irate(cpu_usage_iowait[30m])) by (juju_unit)",
- "format": "time_series",
- "hide": false,
- "instant": false,
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_Iowait",
- "refId": "D",
- "step": 240
- },
- {
- "expr": "1 - avg(irate(cpu_usage_idle[30m])) by (juju_unit)",
- "format": "time_series",
- "hide": false,
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_Total",
- "refId": "F",
- "step": 240
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "CPU",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "decimals": 2,
- "format": "percentunit",
- "label": "",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "title": "CPU",
- "type": "row"
- },
- {
- "collapsed": true,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 8
- },
- "id": 183,
- "panels": [
- {
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "custom": {
- "align": null,
- "filterable": false
- },
- "decimals": 2,
- "displayName": "",
- "mappings": [],
- "thresholds": {
- "mode": "percentage",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- },
- "unit": "short"
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "juju_unit"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Unit"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "device (lastNotNull)"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Device"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "fstype (lastNotNull)"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Filesystem"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "path (lastNotNull)"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Mounted on"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Value #A (lastNotNull)"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Avail"
- },
- {
- "id": "unit",
- "value": "decbytes"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Value #B (lastNotNull)"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Used"
- },
- {
- "id": "unit",
- "value": "percent"
- },
- {
- "id": "custom.displayMode",
- "value": "color-background"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Value #C (lastNotNull)"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Size"
- },
- {
- "id": "unit",
- "value": "decbytes"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Device"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 101
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Filesystem"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 86
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Unit"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 151
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Mounted on"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 94
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Avail"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 74
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Used"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 64
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Size"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 86
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 8,
- "w": 8,
- "x": 0,
- "y": 3
- },
- "id": 164,
- "links": [],
- "options": {
- "showHeader": true,
- "sortBy": []
- },
- "pluginVersion": "7.4.3",
- "targets": [
- {
- "expr": "disk_free{fstype=\"ext4\"}",
- "format": "table",
- "hide": false,
- "instant": true,
- "interval": "10s",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
- },
- {
- "expr": "disk_used_percent{fstype=\"ext4\"}",
- "format": "table",
- "hide": false,
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "B"
- },
- {
- "expr": "disk_total{fstype=\"ext4\"}",
- "format": "table",
- "hide": false,
- "instant": true,
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "C"
- }
- ],
- "title": "Disk Space Used (EXT4/XFS)",
- "transformations": [
- {
- "id": "merge",
- "options": {}
- },
- {
- "id": "groupBy",
- "options": {
- "fields": {
- "Value #A": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- },
- "Value #B": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- },
- "Value #C": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- },
- "device": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- },
- "fstype": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- },
- "juju_unit": {
- "aggregations": [],
- "operation": "groupby"
- },
- "path": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- }
- }
- }
- }
- ],
- "type": "table"
- },
- {
- "datasource": "prometheus - Juju generated source",
- "description": "Per second read / write bytes ",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisLabel": "Bytes read (-) / write (+)",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 10,
- "gradientMode": "opacity",
- "hideFrom": {
- "graph": false,
- "legend": false,
- "tooltip": false
- },
- "lineInterpolation": "linear",
- "lineWidth": 2,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "never",
- "spanNulls": true
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "Bps"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 8,
- "x": 8,
- "y": 3
- },
- "id": 168,
- "links": [],
- "options": {
- "graph": {},
- "legend": {
- "calcs": [
- "mean",
- "max",
- "min",
- "sum"
- ],
- "displayMode": "table",
- "placement": "bottom"
- },
- "tooltipOptions": {
- "mode": "single"
- }
- },
- "pluginVersion": "7.4.3",
- "targets": [
- {
- "expr": "rate(diskio_read_bytes{name!~\"loop.*\"}[$__rate_interval])",
- "format": "time_series",
- "hide": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_{{name}}_Read bytes",
- "refId": "A",
- "step": 10
- },
- {
- "expr": "irate(diskio_write_bytes{name!~\"loop.*\"}[$__rate_interval])",
- "format": "time_series",
- "hide": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_{{name}}_Written bytes",
- "refId": "B",
- "step": 10
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "Disk R/W Data",
- "type": "timeseries"
- },
- {
- "aliasColors": {
- "Idle - Waiting for something to happen": "#052B51",
- "guest": "#9AC48A",
- "idle": "#052B51",
- "iowait": "#EAB839",
- "irq": "#BF1B00",
- "nice": "#C15C17",
- "sdb_每秒I/O操作%": "#d683ce",
- "softirq": "#E24D42",
- "steal": "#FCE2DE",
- "system": "#508642",
- "user": "#5195CE",
- "磁盘花费在I/O操作占比": "#ba43a9"
- },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "decimals": null,
- "description": "The time spent on I/O in the natural time of each second.(wall-clock time)",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 5,
- "gridPos": {
- "h": 8,
- "w": 8,
- "x": 16,
- "y": 3
- },
- "hiddenSeries": false,
- "id": 175,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sideWidth": null,
- "sort": null,
- "sortDesc": null,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [],
- "maxPerRow": 6,
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "irate(diskio_io_time{name!~\"loop.*\"}[$__rate_interval])",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_{{name}}_ IO time",
- "refId": "C"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Time Spent Doing I/Os",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "decimals": null,
- "format": "s",
- "label": "",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "title": "Disk",
- "type": "row"
- },
- {
- "collapsed": true,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 9
- },
- "id": 185,
- "panels": [
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "decimals": 2,
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 8,
- "w": 24,
- "x": 0,
- "y": 12
- },
- "height": "300",
- "hiddenSeries": false,
- "id": 156,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "max": false,
- "min": false,
- "rightSide": false,
- "show": true,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "$$hashKey": "object:2450",
- "alias": "/.*_Total/",
- "color": "#C4162A",
- "fill": 0
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "mem_total",
- "format": "time_series",
- "hide": false,
- "instant": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_Total",
- "refId": "A",
- "step": 4
- },
- {
- "expr": "mem_used",
- "format": "time_series",
- "hide": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_Used",
- "refId": "B",
- "step": 4
- },
- {
- "expr": "mem_available",
- "format": "time_series",
- "hide": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_Avaliable",
- "refId": "F",
- "step": 4
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Memory",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:2459",
- "format": "bytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": "0",
- "show": true
- },
- {
- "$$hashKey": "object:2460",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "title": "Memory",
- "type": "row"
- },
- {
- "collapsed": true,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 10
- },
- "id": 187,
- "panels": [
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 3,
- "gridPos": {
- "h": 12,
- "w": 12,
- "x": 0,
- "y": 13
- },
- "height": "300",
- "hiddenSeries": false,
- "id": 157,
- "legend": {
- "alignAsTable": true,
- "avg": false,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "$$hashKey": "object:2498",
- "alias": "/.*_transmit$/",
- "transform": "negative-Y"
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "irate(net_bytes_recv{interface!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[$__rate_interval])*8",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_{{interface}}_receive",
- "refId": "A",
- "step": 4
- },
- {
- "expr": "irate(net_bytes_sent{interface!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[$__rate_interval])*8",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{instance}}_{{device}}_transmit",
- "refId": "B",
- "step": 4
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Network Traffic",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:2505",
- "format": "bps",
- "label": "transmit(-)/receive(+)",
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:2506",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": false
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {
- "TCP": "#6ED0E0"
- },
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "description": "TCP_alloc - Allocated sockets\n\nCurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT\n\nTCP_tw - Sockets wating close\n\nUDP_inuse - Udp sockets currently in use\n\nSockets_used - Sockets currently in use",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 1,
- "fillGradient": 0,
- "gridPos": {
- "h": 12,
- "w": 12,
- "x": 12,
- "y": 13
- },
- "height": "300",
- "hiddenSeries": false,
- "id": 158,
- "interval": "",
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": true,
- "hideEmpty": true,
- "hideZero": true,
- "max": true,
- "min": false,
- "rightSide": false,
- "show": true,
- "sort": "current",
- "sortDesc": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
- "links": [],
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [
- {
- "$$hashKey": "object:2576",
- "alias": "/.*_Sockets_used/",
- "color": "#C4162A",
- "fill": 0
- }
- ],
- "spaceLength": 10,
- "stack": false,
- "steppedLine": false,
- "targets": [
- {
- "expr": "netstat_tcp_established",
- "format": "time_series",
- "hide": false,
- "instant": false,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_CurrEstab",
- "refId": "A",
- "step": 20
- },
- {
- "expr": "sockstat_TCP_tw",
- "format": "time_series",
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "{{juju_unit}}_TCP_tw",
- "refId": "D"
- },
- {
- "expr": "sockstat_sockets_used",
- "interval": "",
- "legendFormat": "{{juju_unit}}_Sockets_used",
- "refId": "B"
- },
- {
- "expr": "sockstat_UDP_inuse",
- "interval": "",
- "legendFormat": "{{juju_unit}}_UDP_inuse",
- "refId": "C"
- },
- {
- "expr": "sockstat_TCP_alloc",
- "interval": "",
- "legendFormat": "{{juju_unit}}_TCP_alloc",
- "refId": "E"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Network Sockstat",
- "tooltip": {
- "shared": true,
- "sort": 2,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:2585",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:2586",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- }
- ],
- "title": "Network",
- "type": "row"
- }
- ],
- "refresh": false,
- "schemaVersion": 27,
- "style": "dark",
- "tags": [],
- "templating": {
- "list": [
- {
- "allValue": null,
- "current": {
- "isNone": true,
- "selected": false,
- "text": "None",
- "value": ""
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "label_values(node_uname_info, job)",
- "description": null,
- "error": null,
- "hide": 0,
- "includeAll": false,
- "label": "JOB",
- "multi": false,
- "name": "job",
- "options": [],
- "query": {
- "query": "label_values(node_uname_info, job)",
- "refId": "prometheus - Juju generated source-job-Variable-Query"
- },
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "current": {
- "selected": false,
- "text": "All",
- "value": "$__all"
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "label_values(node_uname_info{job=~\"$job\"}, nodename)",
- "description": null,
- "error": null,
- "hide": 0,
- "includeAll": true,
- "label": "Host",
- "multi": true,
- "name": "hostname",
- "options": [],
- "query": {
- "query": "label_values(node_uname_info{job=~\"$job\"}, nodename)",
- "refId": "prometheus - Juju generated source-hostname-Variable-Query"
- },
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allFormat": "glob",
- "allValue": null,
- "current": {
- "selected": false,
- "text": "All",
- "value": "$__all"
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "label_values(node_uname_info{nodename=~\"$hostname\"},instance)",
- "description": null,
- "error": null,
- "hide": 0,
- "includeAll": true,
- "label": "IP",
- "multi": false,
- "multiFormat": "regex values",
- "name": "node",
- "options": [],
- "query": {
- "query": "label_values(node_uname_info{nodename=~\"$hostname\"},instance)",
- "refId": "prometheus - Juju generated source-node-Variable-Query"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allValue": null,
- "current": {
- "isNone": true,
- "selected": false,
- "text": "None",
- "value": ""
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "",
- "description": null,
- "error": null,
- "hide": 2,
- "includeAll": false,
- "label": "",
- "multi": false,
- "name": "maxmount",
- "options": [],
- "query": {
- "query": "query_result(topk(1,sort_desc (max(node_filesystem_size_bytes{instance=~'$node',fstype=~\"ext4|xfs\"}) by (mountpoint))))",
- "refId": "prometheus - Juju generated source-maxmount-Variable-Query"
- },
- "refresh": 2,
- "regex": "/.*\\\"(.*)\\\".*/",
- "skipUrlSync": false,
- "sort": 0,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allFormat": "glob",
- "allValue": null,
- "current": {
- "isNone": true,
- "selected": false,
- "text": "None",
- "value": ""
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "",
- "description": null,
- "error": null,
- "hide": 2,
- "includeAll": false,
- "label": null,
- "multi": false,
- "multiFormat": "regex values",
- "name": "env",
- "options": [],
- "query": {
- "query": "label_values(node_exporter_build_info,env)",
- "refId": "prometheus - Juju generated source-env-Variable-Query"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
- {
- "allFormat": "glob",
- "allValue": "",
- "current": {
- "isNone": true,
- "selected": false,
- "text": "None",
- "value": ""
- },
- "datasource": "prometheus - Juju generated source",
- "definition": "label_values(node_exporter_build_info{env=~'$env'},name)",
- "description": null,
- "error": null,
- "hide": 2,
- "includeAll": false,
- "label": "名称",
- "multi": true,
- "multiFormat": "regex values",
- "name": "name",
- "options": [],
- "query": {
- "query": "label_values(node_exporter_build_info{env=~'$env'},name)",
- "refId": "prometheus - Juju generated source-name-Variable-Query"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "/.*/",
- "tags": [],
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- }
- ]
- },
- "time": {
- "from": "now-2d",
- "to": "now"
- },
- "timepicker": {
- "now": true,
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
- "timezone": "browser",
- "title": "Hosts",
- "uid": "ha7fSE0Zz",
- "version": 16
-}
\ No newline at end of file
+++ /dev/null
-{
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": "-- Grafana --",
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "OSM status summary",
- "editable": true,
- "gnetId": 6417,
- "graphTooltip": 1,
- "id": 5,
- "iteration": 1615160504049,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": false,
- "tags": [],
- "title": "Dashboards",
- "type": "dashboards"
- }
- ],
- "panels": [
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 2,
- "panels": [],
- "title": "Cluster Health",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorPrefix": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 2,
- "w": 12,
- "x": 0,
- "y": 1
- },
- "id": 26,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": " Nodes",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "repeat": null,
- "repeatDirection": "h",
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(kube_node_info)",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "B"
- }
- ],
- "thresholds": "1",
- "title": "",
- "type": "singlestat",
- "valueFontSize": "70%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 2,
- "w": 12,
- "x": 12,
- "y": 1
- },
- "id": 30,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": " Pods Running",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(78, 203, 42, 0.28)",
- "full": false,
- "lineColor": "#629e51",
- "show": true
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(kube_pod_status_phase)",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "",
- "title": "",
- "type": "singlestat",
- "valueFontSize": "70%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": true,
- "colorPrefix": false,
- "colorValue": false,
- "colors": [
- "#56A64B",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 2,
- "w": 12,
- "x": 0,
- "y": 3
- },
- "id": 24,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": " Nodes Unavailable",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(kube_node_info)-sum(kube_node_status_condition{condition=\"Ready\", status=\"true\"})",
- "format": "time_series",
- "instant": true,
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": "1,1",
- "title": "",
- "type": "singlestat",
- "valueFontSize": "70%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": true,
- "colorValue": false,
- "colors": [
- "#56A64B",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 100,
- "minValue": 0,
- "show": false,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 2,
- "w": 12,
- "x": 12,
- "y": 3
- },
- "id": 55,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": " Pods not Ready",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(kube_pod_status_phase{phase!=\"Running\"})",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "1",
- "timeFrom": null,
- "timeShift": null,
- "title": "",
- "type": "singlestat",
- "valueFontSize": "70%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "avg"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "percentunit",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 4,
- "w": 6,
- "x": 0,
- "y": 5
- },
- "id": 4,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(kube_pod_info) / sum(kube_node_status_allocatable_pods)",
- "format": "time_series",
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": "0.7,0.85",
- "title": "Pod Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "percentunit",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 4,
- "w": 6,
- "x": 6,
- "y": 5
- },
- "id": 5,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(kube_pod_container_resource_requests_cpu_cores) / sum(kube_node_status_allocatable_cpu_cores)",
- "format": "time_series",
- "instant": true,
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": "0.7,0.85",
- "title": "CPU Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#299c46",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "percentunit",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 4,
- "w": 6,
- "x": 12,
- "y": 5
- },
- "id": 6,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "sum(kube_pod_container_resource_requests_memory_bytes) / sum(kube_node_status_allocatable_memory_bytes)",
- "format": "time_series",
- "instant": true,
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": "0.7,0.85",
- "title": "Memory Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#73BF69",
- "rgba(237, 129, 40, 0.89)",
- "#d44a3a"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "percentunit",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": true
- },
- "gridPos": {
- "h": 4,
- "w": 6,
- "x": 18,
- "y": 5
- },
- "id": 7,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "(sum (node_filesystem_size_bytes) - sum (node_filesystem_free_bytes)) / sum (node_filesystem_size_bytes)",
- "format": "time_series",
- "instant": true,
- "intervalFactor": 1,
- "refId": "A"
- }
- ],
- "thresholds": "0.7,0.85",
- "title": "Disk Usage",
- "type": "singlestat",
- "valueFontSize": "80%",
- "valueMaps": [
- {
- "op": "=",
- "text": "N/A",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "collapsed": false,
- "datasource": null,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 9
- },
- "id": 61,
- "panels": [],
- "title": "OSM",
- "type": "row"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 10
- },
- "id": 71,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"prometheus-k8s\"}",
- "format": "time_series",
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "Prometheus",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "decimals": null,
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 4,
- "y": 10
- },
- "id": 74,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"mongodb-k8s\"}",
- "format": "time_series",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "mongo",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 8,
- "y": 10
- },
- "id": 72,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"mariadb-k8s\"}",
- "format": "time_series",
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "mysql ",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 12,
- "y": 10
- },
- "id": 77,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "pluginVersion": "6.3.5",
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"ro-k8s\"}",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "ro",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "decimals": null,
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 16,
- "y": 10
- },
- "id": 73,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"zookeeper-k8s\"}",
- "format": "time_series",
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "zookeeper",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "decimals": null,
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 20,
- "y": 10
- },
- "id": 78,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"kafka-k8s\"}",
- "format": "time_series",
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "kafka",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 14
- },
- "id": 76,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "pluginVersion": "6.3.5",
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"lcm-k8s\"}",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "lcm",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "description": "",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 8,
- "y": 14
- },
- "id": 75,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "pluginVersion": "6.3.5",
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"nbi-k8s\"}",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "nbi",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 12,
- "y": 14
- },
- "id": 67,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "pluginVersion": "6.3.5",
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"pol-k8s\"}",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "pol",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 16,
- "y": 14
- },
- "id": 69,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "pluginVersion": "6.3.5",
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_statefulset_status_replicas_ready{namespace=\"osm\", statefulset=\"mon-k8s\"}",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "mon",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "avg"
- },
- {
- "cacheTimeout": null,
- "colorBackground": false,
- "colorValue": false,
- "colors": [
- "#d44a3a",
- "rgba(237, 129, 40, 0.89)",
- "#299c46"
- ],
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "format": "none",
- "gauge": {
- "maxValue": 1,
- "minValue": 0,
- "show": true,
- "thresholdLabels": false,
- "thresholdMarkers": false
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 20,
- "y": 14
- },
- "id": 81,
- "interval": null,
- "links": [],
- "mappingType": 1,
- "mappingTypes": [
- {
- "name": "value to text",
- "value": 1
- },
- {
- "name": "range to text",
- "value": 2
- }
- ],
- "maxDataPoints": 100,
- "nullPointMode": "connected",
- "nullText": null,
- "pluginVersion": "6.3.5",
- "postfix": "",
- "postfixFontSize": "50%",
- "prefix": "",
- "prefixFontSize": "50%",
- "rangeMaps": [
- {
- "from": "null",
- "text": "N/A",
- "to": "null"
- }
- ],
- "sparkline": {
- "fillColor": "rgba(31, 118, 189, 0.18)",
- "full": false,
- "lineColor": "rgb(31, 120, 193)",
- "show": false,
- "ymax": null,
- "ymin": null
- },
- "tableColumn": "",
- "targets": [
- {
- "expr": "kube_deployment_status_replicas_available{deployment=\"keystone\"}",
- "format": "time_series",
- "instant": true,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "thresholds": "0,1",
- "timeFrom": null,
- "timeShift": null,
- "title": "keystone",
- "type": "singlestat",
- "valueFontSize": "100%",
- "valueMaps": [
- {
- "op": "=",
- "text": "0",
- "value": "null"
- }
- ],
- "valueName": "current"
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 6,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 23,
- "x": 0,
- "y": 18
- },
- "hiddenSeries": false,
- "id": 84,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(container_cpu_usage_seconds_total{namespace=\"osm\", pod!~\".*operator.*\"}[$__rate_interval])) by (pod)",
- "instant": false,
- "interval": "",
- "intervalFactor": 4,
- "legendFormat": "{{pod}}",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Pod CPU Usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:3755",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:3756",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "aliasColors": {},
- "bars": false,
- "dashLength": 10,
- "dashes": false,
- "datasource": "prometheus - Juju generated source",
- "fieldConfig": {
- "defaults": {
- "custom": {},
- "links": []
- },
- "overrides": []
- },
- "fill": 6,
- "fillGradient": 0,
- "gridPos": {
- "h": 9,
- "w": 23,
- "x": 0,
- "y": 27
- },
- "hiddenSeries": false,
- "id": 85,
- "legend": {
- "avg": false,
- "current": false,
- "max": false,
- "min": false,
- "show": true,
- "total": false,
- "values": false
- },
- "lines": true,
- "linewidth": 1,
- "nullPointMode": "null",
- "options": {
- "alertThreshold": true
- },
- "percentage": false,
- "pluginVersion": "7.4.3",
- "pointradius": 2,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
- "spaceLength": 10,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "expr": "sum(rate(container_memory_working_set_bytes{namespace=\"osm\", pod!~\".*operator.*\"}[$__rate_interval])) by (pod)",
- "interval": "",
- "intervalFactor": 4,
- "legendFormat": "{{pod}}",
- "refId": "A"
- }
- ],
- "thresholds": [],
- "timeFrom": null,
- "timeRegions": [],
- "timeShift": null,
- "title": "Pod Memory Usage",
- "tooltip": {
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "buckets": null,
- "mode": "time",
- "name": null,
- "show": true,
- "values": []
- },
- "yaxes": [
- {
- "$$hashKey": "object:3786",
- "format": "decbytes",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- },
- {
- "$$hashKey": "object:3787",
- "format": "short",
- "label": null,
- "logBase": 1,
- "max": null,
- "min": null,
- "show": true
- }
- ],
- "yaxis": {
- "align": false,
- "alignLevel": null
- }
- },
- {
- "cacheTimeout": null,
- "datasource": null,
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 21,
- "y": 36
- },
- "id": 82,
- "links": [],
- "options": {
- "content": "\n\n\n",
- "mode": "markdown"
- },
- "pluginVersion": "7.4.3",
- "targets": [
- {
- "expr": "",
- "instant": true,
- "refId": "A"
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "",
- "transparent": true,
- "type": "text"
- },
- {
- "cacheTimeout": null,
- "datasource": null,
- "fieldConfig": {
- "defaults": {
- "custom": {}
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 19,
- "y": 40
- },
- "id": 80,
- "links": [],
- "options": {
- "content": "<h2 style=\"text-align: center;\"></p>\n\n\n",
- "mode": "html"
- },
- "pluginVersion": "7.4.3",
- "targets": [
- {
- "expr": "",
- "instant": true,
- "refId": "A"
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "",
- "transparent": true,
- "type": "text"
- }
- ],
- "refresh": "30s",
- "schemaVersion": 27,
- "style": "dark",
- "tags": [],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "No data sources found",
- "value": ""
- },
- "description": null,
- "error": null,
- "hide": 2,
- "includeAll": false,
- "label": "",
- "multi": false,
- "name": "datasource",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "/$ds/",
- "skipUrlSync": false,
- "type": "datasource"
- }
- ]
- },
- "time": {
- "from": "now-15m",
- "to": "now"
- },
- "timepicker": {
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ]
- },
- "timezone": "browser",
- "title": "OSM Status Summary",
- "uid": "4XuPd2Ii1",
- "version": 12
-}
\ No newline at end of file
+++ /dev/null
-#!/usr/bin/env python3
-# Copyright 2020 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-"""Init mocking for unit tests."""
-
-import sys
-
-
-import mock
-
-
-class OCIImageResourceErrorMock(Exception):
- pass
-
-
-sys.path.append("src")
-
-oci_image = mock.MagicMock()
-oci_image.OCIImageResourceError = OCIImageResourceErrorMock
-sys.modules["oci_image"] = oci_image
-sys.modules["oci_image"].OCIImageResource().fetch.return_value = {}
+++ /dev/null
-#!/usr/bin/env python3
-# Copyright 2020 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-
-import sys
-from typing import NoReturn
-import unittest
-from unittest.mock import patch
-
-from charm import GrafanaCharm
-from ops.model import ActiveStatus, BlockedStatus
-from ops.testing import Harness
-
-
-class TestCharm(unittest.TestCase):
- """Prometheus Charm unit tests."""
-
- def setUp(self) -> NoReturn:
- """Test setup"""
- self.image_info = sys.modules["oci_image"].OCIImageResource().fetch()
- self.harness = Harness(GrafanaCharm)
- self.harness.set_leader(is_leader=True)
- self.harness.begin()
- self.config = {
- "max_file_size": 0,
- "ingress_whitelist_source_range": "",
- "tls_secret_name": "",
- "site_url": "https://grafana.192.168.100.100.nip.io",
- "cluster_issuer": "vault-issuer",
- "osm_dashboards": True,
- }
- self.harness.update_config(self.config)
-
- def test_config_changed(
- self,
- ) -> NoReturn:
- """Test ingress resources without HTTP."""
-
- self.harness.charm.on.config_changed.emit()
-
- # Assertions
- self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
- self.assertTrue("prometheus" in self.harness.charm.unit.status.message)
-
- def test_config_changed_non_leader(
- self,
- ) -> NoReturn:
- """Test ingress resources without HTTP."""
- self.harness.set_leader(is_leader=False)
- self.harness.charm.on.config_changed.emit()
-
- # Assertions
- self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
-
- @patch("opslib.osm.interfaces.grafana.GrafanaCluster.set_initial_password")
- def test_with_db_relation_and_prometheus(self, _) -> NoReturn:
- self.initialize_prometheus_relation()
- self.initialize_mysql_relation()
- self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
-
- @patch("opslib.osm.interfaces.grafana.GrafanaCluster.set_initial_password")
- def test_with_db_config_and_prometheus(self, _) -> NoReturn:
- self.initialize_prometheus_relation()
- self.initialize_mysql_config()
- self.assertIsInstance(self.harness.charm.unit.status, ActiveStatus)
-
- def test_with_prometheus(
- self,
- ) -> NoReturn:
- """Test to see if prometheus relation is updated."""
- self.initialize_prometheus_relation()
- # Verifying status
- self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
- def test_with_db_config(self) -> NoReturn:
- "Test with mysql config"
- self.initialize_mysql_config()
- # Verifying status
- self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
- @patch("opslib.osm.interfaces.grafana.GrafanaCluster.set_initial_password")
- def test_with_db_relations(self, _) -> NoReturn:
- "Test with relations"
- self.initialize_mysql_relation()
- # Verifying status
- self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
- def test_exception_db_relation_and_config(
- self,
- ) -> NoReturn:
- "Test with relations and config. Must throw exception"
- self.initialize_mysql_config()
- self.initialize_mysql_relation()
- # Verifying status
- self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
- def initialize_prometheus_relation(self):
- relation_id = self.harness.add_relation("prometheus", "prometheus")
- self.harness.add_relation_unit(relation_id, "prometheus/0")
- self.harness.update_relation_data(
- relation_id,
- "prometheus",
- {"hostname": "prometheus", "port": 9090},
- )
-
- def initialize_mysql_config(self):
- self.harness.update_config(
- {"mysql_uri": "mysql://grafana:$grafanapw$@host:3606/db"}
- )
-
- def initialize_mysql_relation(self):
- relation_id = self.harness.add_relation("db", "mysql")
- self.harness.add_relation_unit(relation_id, "mysql/0")
- self.harness.update_relation_data(
- relation_id,
- "mysql/0",
- {
- "host": "mysql",
- "port": 3306,
- "user": "mano",
- "password": "manopw",
- "root_password": "rootmanopw",
- },
- )
-
-
-if __name__ == "__main__":
- unittest.main()
-
-# class TestCharm(unittest.TestCase):
-# """Grafana Charm unit tests."""
-
-# def setUp(self) -> NoReturn:
-# """Test setup"""
-# self.harness = Harness(GrafanaCharm)
-# self.harness.set_leader(is_leader=True)
-# self.harness.begin()
-
-# def test_on_start_without_relations(self) -> NoReturn:
-# """Test installation without any relation."""
-# self.harness.charm.on.start.emit()
-
-# # Verifying status
-# self.assertIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
-# # Verifying status message
-# self.assertGreater(len(self.harness.charm.unit.status.message), 0)
-# self.assertTrue(
-# self.harness.charm.unit.status.message.startswith("Waiting for ")
-# )
-# self.assertIn("prometheus", self.harness.charm.unit.status.message)
-# self.assertTrue(self.harness.charm.unit.status.message.endswith(" relation"))
-
-# def test_on_start_with_relations_without_http(self) -> NoReturn:
-# """Test deployment."""
-# expected_result = {
-# "version": 3,
-# "containers": [
-# {
-# "name": "grafana",
-# "imageDetails": self.harness.charm.image.fetch(),
-# "imagePullPolicy": "Always",
-# "ports": [
-# {
-# "name": "grafana",
-# "containerPort": 3000,
-# "protocol": "TCP",
-# }
-# ],
-# "envConfig": {},
-# "volumeConfig": [
-# {
-# "name": "dashboards",
-# "mountPath": "/etc/grafana/provisioning/dashboards/",
-# "files": [
-# {
-# "path": "dashboard-osm.yml",
-# "content": (
-# "apiVersion: 1\n"
-# "providers:\n"
-# " - name: 'osm'\n"
-# " orgId: 1\n"
-# " folder: ''\n"
-# " type: file\n"
-# " options:\n"
-# " path: /etc/grafana/provisioning/dashboards/\n"
-# ),
-# },
-# ],
-# },
-# {
-# "name": "datasources",
-# "mountPath": "/etc/grafana/provisioning/datasources/",
-# "files": [
-# {
-# "path": "datasource-prometheus.yml",
-# "content": (
-# "datasources:\n"
-# " - access: proxy\n"
-# " editable: true\n"
-# " is_default: true\n"
-# " name: osm_prometheus\n"
-# " orgId: 1\n"
-# " type: prometheus\n"
-# " version: 1\n"
-# " url: http://prometheus:9090\n"
-# ),
-# },
-# ],
-# },
-# ],
-# "kubernetes": {
-# "readinessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 10,
-# "periodSeconds": 10,
-# "timeoutSeconds": 5,
-# "successThreshold": 1,
-# "failureThreshold": 3,
-# },
-# "livenessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 60,
-# "timeoutSeconds": 30,
-# "failureThreshold": 10,
-# },
-# },
-# },
-# ],
-# "kubernetesResources": {"ingressResources": []},
-# }
-
-# self.harness.charm.on.start.emit()
-
-# # Initializing the prometheus relation
-# relation_id = self.harness.add_relation("prometheus", "prometheus")
-# self.harness.add_relation_unit(relation_id, "prometheus/0")
-# self.harness.update_relation_data(
-# relation_id,
-# "prometheus",
-# {
-# "hostname": "prometheus",
-# "port": "9090",
-# },
-# )
-
-# # Verifying status
-# self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
-# pod_spec, _ = self.harness.get_pod_spec()
-
-# self.assertDictEqual(expected_result, pod_spec)
-
-# def test_ingress_resources_with_http(self) -> NoReturn:
-# """Test ingress resources with HTTP."""
-# expected_result = {
-# "version": 3,
-# "containers": [
-# {
-# "name": "grafana",
-# "imageDetails": self.harness.charm.image.fetch(),
-# "imagePullPolicy": "Always",
-# "ports": [
-# {
-# "name": "grafana",
-# "containerPort": 3000,
-# "protocol": "TCP",
-# }
-# ],
-# "envConfig": {},
-# "volumeConfig": [
-# {
-# "name": "dashboards",
-# "mountPath": "/etc/grafana/provisioning/dashboards/",
-# "files": [
-# {
-# "path": "dashboard-osm.yml",
-# "content": (
-# "apiVersion: 1\n"
-# "providers:\n"
-# " - name: 'osm'\n"
-# " orgId: 1\n"
-# " folder: ''\n"
-# " type: file\n"
-# " options:\n"
-# " path: /etc/grafana/provisioning/dashboards/\n"
-# ),
-# },
-# ],
-# },
-# {
-# "name": "datasources",
-# "mountPath": "/etc/grafana/provisioning/datasources/",
-# "files": [
-# {
-# "path": "datasource-prometheus.yml",
-# "content": (
-# "datasources:\n"
-# " - access: proxy\n"
-# " editable: true\n"
-# " is_default: true\n"
-# " name: osm_prometheus\n"
-# " orgId: 1\n"
-# " type: prometheus\n"
-# " version: 1\n"
-# " url: http://prometheus:9090\n"
-# ),
-# },
-# ],
-# },
-# ],
-# "kubernetes": {
-# "readinessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 10,
-# "periodSeconds": 10,
-# "timeoutSeconds": 5,
-# "successThreshold": 1,
-# "failureThreshold": 3,
-# },
-# "livenessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 60,
-# "timeoutSeconds": 30,
-# "failureThreshold": 10,
-# },
-# },
-# },
-# ],
-# "kubernetesResources": {
-# "ingressResources": [
-# {
-# "name": "grafana-ingress",
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": "0",
-# "nginx.ingress.kubernetes.io/ssl-redirect": "false",
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": "grafana",
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": "grafana",
-# "servicePort": 3000,
-# },
-# }
-# ]
-# },
-# }
-# ]
-# },
-# }
-# ],
-# },
-# }
-
-# self.harness.charm.on.start.emit()
-
-# # Initializing the prometheus relation
-# relation_id = self.harness.add_relation("prometheus", "prometheus")
-# self.harness.add_relation_unit(relation_id, "prometheus/0")
-# self.harness.update_relation_data(
-# relation_id,
-# "prometheus",
-# {
-# "hostname": "prometheus",
-# "port": "9090",
-# },
-# )
-
-# self.harness.update_config({"site_url": "http://grafana"})
-
-# pod_spec, _ = self.harness.get_pod_spec()
-
-# self.assertDictEqual(expected_result, pod_spec)
-
-# def test_ingress_resources_with_https(self) -> NoReturn:
-# """Test ingress resources with HTTPS."""
-# expected_result = {
-# "version": 3,
-# "containers": [
-# {
-# "name": "grafana",
-# "imageDetails": self.harness.charm.image.fetch(),
-# "imagePullPolicy": "Always",
-# "ports": [
-# {
-# "name": "grafana",
-# "containerPort": 3000,
-# "protocol": "TCP",
-# }
-# ],
-# "envConfig": {},
-# "volumeConfig": [
-# {
-# "name": "dashboards",
-# "mountPath": "/etc/grafana/provisioning/dashboards/",
-# "files": [
-# {
-# "path": "dashboard-osm.yml",
-# "content": (
-# "apiVersion: 1\n"
-# "providers:\n"
-# " - name: 'osm'\n"
-# " orgId: 1\n"
-# " folder: ''\n"
-# " type: file\n"
-# " options:\n"
-# " path: /etc/grafana/provisioning/dashboards/\n"
-# ),
-# },
-# ],
-# },
-# {
-# "name": "datasources",
-# "mountPath": "/etc/grafana/provisioning/datasources/",
-# "files": [
-# {
-# "path": "datasource-prometheus.yml",
-# "content": (
-# "datasources:\n"
-# " - access: proxy\n"
-# " editable: true\n"
-# " is_default: true\n"
-# " name: osm_prometheus\n"
-# " orgId: 1\n"
-# " type: prometheus\n"
-# " version: 1\n"
-# " url: http://prometheus:9090\n"
-# ),
-# },
-# ],
-# },
-# ],
-# "kubernetes": {
-# "readinessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 10,
-# "periodSeconds": 10,
-# "timeoutSeconds": 5,
-# "successThreshold": 1,
-# "failureThreshold": 3,
-# },
-# "livenessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 60,
-# "timeoutSeconds": 30,
-# "failureThreshold": 10,
-# },
-# },
-# },
-# ],
-# "kubernetesResources": {
-# "ingressResources": [
-# {
-# "name": "grafana-ingress",
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": "0",
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": "grafana",
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": "grafana",
-# "servicePort": 3000,
-# },
-# }
-# ]
-# },
-# }
-# ],
-# "tls": [{"hosts": ["grafana"], "secretName": "grafana"}],
-# },
-# }
-# ],
-# },
-# }
-
-# self.harness.charm.on.start.emit()
-
-# # Initializing the prometheus relation
-# relation_id = self.harness.add_relation("prometheus", "prometheus")
-# self.harness.add_relation_unit(relation_id, "prometheus/0")
-# self.harness.update_relation_data(
-# relation_id,
-# "prometheus",
-# {
-# "hostname": "prometheus",
-# "port": "9090",
-# },
-# )
-
-# self.harness.update_config(
-# {"site_url": "https://grafana", "tls_secret_name": "grafana"}
-# )
-
-# pod_spec, _ = self.harness.get_pod_spec()
-
-# self.assertDictEqual(expected_result, pod_spec)
-
-# def test_ingress_resources_with_https_and_ingress_whitelist(self) -> NoReturn:
-# """Test ingress resources with HTTPS and ingress whitelist."""
-# expected_result = {
-# "version": 3,
-# "containers": [
-# {
-# "name": "grafana",
-# "imageDetails": self.harness.charm.image.fetch(),
-# "imagePullPolicy": "Always",
-# "ports": [
-# {
-# "name": "grafana",
-# "containerPort": 3000,
-# "protocol": "TCP",
-# }
-# ],
-# "envConfig": {},
-# "volumeConfig": [
-# {
-# "name": "dashboards",
-# "mountPath": "/etc/grafana/provisioning/dashboards/",
-# "files": [
-# {
-# "path": "dashboard-osm.yml",
-# "content": (
-# "apiVersion: 1\n"
-# "providers:\n"
-# " - name: 'osm'\n"
-# " orgId: 1\n"
-# " folder: ''\n"
-# " type: file\n"
-# " options:\n"
-# " path: /etc/grafana/provisioning/dashboards/\n"
-# ),
-# },
-# ],
-# },
-# {
-# "name": "datasources",
-# "mountPath": "/etc/grafana/provisioning/datasources/",
-# "files": [
-# {
-# "path": "datasource-prometheus.yml",
-# "content": (
-# "datasources:\n"
-# " - access: proxy\n"
-# " editable: true\n"
-# " is_default: true\n"
-# " name: osm_prometheus\n"
-# " orgId: 1\n"
-# " type: prometheus\n"
-# " version: 1\n"
-# " url: http://prometheus:9090\n"
-# ),
-# },
-# ],
-# },
-# ],
-# "kubernetes": {
-# "readinessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 10,
-# "periodSeconds": 10,
-# "timeoutSeconds": 5,
-# "successThreshold": 1,
-# "failureThreshold": 3,
-# },
-# "livenessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": 3000,
-# },
-# "initialDelaySeconds": 60,
-# "timeoutSeconds": 30,
-# "failureThreshold": 10,
-# },
-# },
-# },
-# ],
-# "kubernetesResources": {
-# "ingressResources": [
-# {
-# "name": "grafana-ingress",
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": "0",
-# "nginx.ingress.kubernetes.io/whitelist-source-range": "0.0.0.0/0",
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": "grafana",
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": "grafana",
-# "servicePort": 3000,
-# },
-# }
-# ]
-# },
-# }
-# ],
-# "tls": [{"hosts": ["grafana"], "secretName": "grafana"}],
-# },
-# }
-# ],
-# },
-# }
-
-# self.harness.charm.on.start.emit()
-
-# # Initializing the prometheus relation
-# relation_id = self.harness.add_relation("prometheus", "prometheus")
-# self.harness.add_relation_unit(relation_id, "prometheus/0")
-# self.harness.update_relation_data(
-# relation_id,
-# "prometheus",
-# {
-# "hostname": "prometheus",
-# "port": "9090",
-# },
-# )
-
-# self.harness.update_config(
-# {
-# "site_url": "https://grafana",
-# "tls_secret_name": "grafana",
-# "ingress_whitelist_source_range": "0.0.0.0/0",
-# }
-# )
-
-# pod_spec, _ = self.harness.get_pod_spec()
-
-# self.assertDictEqual(expected_result, pod_spec)
-
-# def test_on_prometheus_unit_relation_changed(self) -> NoReturn:
-# """Test to see if prometheus relation is updated."""
-# self.harness.charm.on.start.emit()
-
-# relation_id = self.harness.add_relation("prometheus", "prometheus")
-# self.harness.add_relation_unit(relation_id, "prometheus/0")
-# self.harness.update_relation_data(
-# relation_id,
-# "prometheus",
-# {"hostname": "prometheus", "port": 9090},
-# )
-
-# # Verifying status
-# self.assertNotIsInstance(self.harness.charm.unit.status, BlockedStatus)
-
-
-if __name__ == "__main__":
- unittest.main()
+++ /dev/null
-# #!/usr/bin/env python3
-# # Copyright 2021 Canonical Ltd.
-# #
-# # Licensed under the Apache License, Version 2.0 (the "License"); you may
-# # not use this file except in compliance with the License. You may obtain
-# # a copy of the License at
-# #
-# # http://www.apache.org/licenses/LICENSE-2.0
-# #
-# # Unless required by applicable law or agreed to in writing, software
-# # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# # License for the specific language governing permissions and limitations
-# # under the License.
-# #
-# # For those usages not covered by the Apache License, Version 2.0 please
-# # contact: legal@canonical.com
-# #
-# # To get in touch with the maintainers, please contact:
-# # osm-charmers@lists.launchpad.net
-# ##
-
-# from typing import NoReturn
-# import unittest
-
-# import pod_spec
-
-
-# class TestPodSpec(unittest.TestCase):
-# """Pod spec unit tests."""
-
-# def test_make_pod_ports(self) -> NoReturn:
-# """Testing make pod ports."""
-# port = 3000
-
-# expected_result = [
-# {
-# "name": "grafana",
-# "containerPort": port,
-# "protocol": "TCP",
-# }
-# ]
-
-# pod_ports = pod_spec._make_pod_ports(port)
-
-# self.assertListEqual(expected_result, pod_ports)
-
-# def test_make_pod_envconfig(self) -> NoReturn:
-# """Teting make pod envconfig."""
-# config = {}
-# relation_state = {
-# "prometheus_hostname": "prometheus",
-# "prometheus_port": "9090",
-# }
-
-# expected_result = {}
-
-# pod_envconfig = pod_spec._make_pod_envconfig(config, relation_state)
-
-# self.assertDictEqual(expected_result, pod_envconfig)
-
-# def test_make_pod_ingress_resources_without_site_url(self) -> NoReturn:
-# """Testing make pod ingress resources without site_url."""
-# config = {"site_url": ""}
-# app_name = "grafana"
-# port = 3000
-
-# pod_ingress_resources = pod_spec._make_pod_ingress_resources(
-# config, app_name, port
-# )
-
-# self.assertIsNone(pod_ingress_resources)
-
-# def test_make_pod_ingress_resources(self) -> NoReturn:
-# """Testing make pod ingress resources."""
-# config = {
-# "site_url": "http://grafana",
-# "max_file_size": 0,
-# "ingress_whitelist_source_range": "",
-# }
-# app_name = "grafana"
-# port = 3000
-
-# expected_result = [
-# {
-# "name": f"{app_name}-ingress",
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": f"{config['max_file_size']}",
-# "nginx.ingress.kubernetes.io/ssl-redirect": "false",
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": app_name,
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": app_name,
-# "servicePort": port,
-# },
-# }
-# ]
-# },
-# }
-# ]
-# },
-# }
-# ]
-
-# pod_ingress_resources = pod_spec._make_pod_ingress_resources(
-# config, app_name, port
-# )
-
-# self.assertListEqual(expected_result, pod_ingress_resources)
-
-# def test_make_pod_ingress_resources_with_whitelist_source_range(self) -> NoReturn:
-# """Testing make pod ingress resources with whitelist_source_range."""
-# config = {
-# "site_url": "http://grafana",
-# "max_file_size": 0,
-# "ingress_whitelist_source_range": "0.0.0.0/0",
-# }
-# app_name = "grafana"
-# port = 3000
-
-# expected_result = [
-# {
-# "name": f"{app_name}-ingress",
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": f"{config['max_file_size']}",
-# "nginx.ingress.kubernetes.io/ssl-redirect": "false",
-# "nginx.ingress.kubernetes.io/whitelist-source-range": config[
-# "ingress_whitelist_source_range"
-# ],
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": app_name,
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": app_name,
-# "servicePort": port,
-# },
-# }
-# ]
-# },
-# }
-# ]
-# },
-# }
-# ]
-
-# pod_ingress_resources = pod_spec._make_pod_ingress_resources(
-# config, app_name, port
-# )
-
-# self.assertListEqual(expected_result, pod_ingress_resources)
-
-# def test_make_pod_ingress_resources_with_https(self) -> NoReturn:
-# """Testing make pod ingress resources with HTTPs."""
-# config = {
-# "site_url": "https://grafana",
-# "max_file_size": 0,
-# "ingress_whitelist_source_range": "",
-# "tls_secret_name": "",
-# }
-# app_name = "grafana"
-# port = 3000
-
-# expected_result = [
-# {
-# "name": f"{app_name}-ingress",
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": f"{config['max_file_size']}",
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": app_name,
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": app_name,
-# "servicePort": port,
-# },
-# }
-# ]
-# },
-# }
-# ],
-# "tls": [{"hosts": [app_name]}],
-# },
-# }
-# ]
-
-# pod_ingress_resources = pod_spec._make_pod_ingress_resources(
-# config, app_name, port
-# )
-
-# self.assertListEqual(expected_result, pod_ingress_resources)
-
-# def test_make_pod_ingress_resources_with_https_tls_secret_name(self) -> NoReturn:
-# """Testing make pod ingress resources with HTTPs and TLS secret name."""
-# config = {
-# "site_url": "https://grafana",
-# "max_file_size": 0,
-# "ingress_whitelist_source_range": "",
-# "tls_secret_name": "secret_name",
-# }
-# app_name = "grafana"
-# port = 3000
-
-# expected_result = [
-# {
-# "name": f"{app_name}-ingress",
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": f"{config['max_file_size']}",
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": app_name,
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": app_name,
-# "servicePort": port,
-# },
-# }
-# ]
-# },
-# }
-# ],
-# "tls": [
-# {"hosts": [app_name], "secretName": config["tls_secret_name"]}
-# ],
-# },
-# }
-# ]
-
-# pod_ingress_resources = pod_spec._make_pod_ingress_resources(
-# config, app_name, port
-# )
-
-# self.assertListEqual(expected_result, pod_ingress_resources)
-
-# def test_make_pod_files(self) -> NoReturn:
-# """Testing make pod files."""
-# config = {"osm_dashboards": False}
-# relation_state = {
-# "prometheus_hostname": "prometheus",
-# "prometheus_port": "9090",
-# }
-
-# expected_result = [
-# {
-# "name": "dashboards",
-# "mountPath": "/etc/grafana/provisioning/dashboards/",
-# "files": [
-# {
-# "path": "dashboard-osm.yml",
-# "content": (
-# "apiVersion: 1\n"
-# "providers:\n"
-# " - name: 'osm'\n"
-# " orgId: 1\n"
-# " folder: ''\n"
-# " type: file\n"
-# " options:\n"
-# " path: /etc/grafana/provisioning/dashboards/\n"
-# ),
-# }
-# ],
-# },
-# {
-# "name": "datasources",
-# "mountPath": "/etc/grafana/provisioning/datasources/",
-# "files": [
-# {
-# "path": "datasource-prometheus.yml",
-# "content": (
-# "datasources:\n"
-# " - access: proxy\n"
-# " editable: true\n"
-# " is_default: true\n"
-# " name: osm_prometheus\n"
-# " orgId: 1\n"
-# " type: prometheus\n"
-# " version: 1\n"
-# " url: http://{}:{}\n".format(
-# relation_state.get("prometheus_hostname"),
-# relation_state.get("prometheus_port"),
-# )
-# ),
-# }
-# ],
-# },
-# ]
-
-# pod_envconfig = pod_spec._make_pod_files(config, relation_state)
-# self.assertListEqual(expected_result, pod_envconfig)
-
-# def test_make_readiness_probe(self) -> NoReturn:
-# """Testing make readiness probe."""
-# port = 3000
-
-# expected_result = {
-# "httpGet": {
-# "path": "/api/health",
-# "port": port,
-# },
-# "initialDelaySeconds": 10,
-# "periodSeconds": 10,
-# "timeoutSeconds": 5,
-# "successThreshold": 1,
-# "failureThreshold": 3,
-# }
-
-# readiness_probe = pod_spec._make_readiness_probe(port)
-
-# self.assertDictEqual(expected_result, readiness_probe)
-
-# def test_make_liveness_probe(self) -> NoReturn:
-# """Testing make liveness probe."""
-# port = 3000
-
-# expected_result = {
-# "httpGet": {
-# "path": "/api/health",
-# "port": port,
-# },
-# "initialDelaySeconds": 60,
-# "timeoutSeconds": 30,
-# "failureThreshold": 10,
-# }
-
-# liveness_probe = pod_spec._make_liveness_probe(port)
-
-# self.assertDictEqual(expected_result, liveness_probe)
-
-# def test_make_pod_spec(self) -> NoReturn:
-# """Testing make pod spec."""
-# image_info = {"upstream-source": "ubuntu/grafana:latest"}
-# config = {
-# "site_url": "",
-# }
-# relation_state = {
-# "prometheus_hostname": "prometheus",
-# "prometheus_port": "9090",
-# }
-# app_name = "grafana"
-# port = 3000
-
-# expected_result = {
-# "version": 3,
-# "containers": [
-# {
-# "name": app_name,
-# "imageDetails": image_info,
-# "imagePullPolicy": "Always",
-# "ports": [
-# {
-# "name": app_name,
-# "containerPort": port,
-# "protocol": "TCP",
-# }
-# ],
-# "envConfig": {},
-# "volumeConfig": [
-# {
-# "name": "dashboards",
-# "mountPath": "/etc/grafana/provisioning/dashboards/",
-# "files": [
-# {
-# "path": "dashboard-osm.yml",
-# "content": (
-# "apiVersion: 1\n"
-# "providers:\n"
-# " - name: 'osm'\n"
-# " orgId: 1\n"
-# " folder: ''\n"
-# " type: file\n"
-# " options:\n"
-# " path: /etc/grafana/provisioning/dashboards/\n"
-# ),
-# }
-# ],
-# },
-# {
-# "name": "datasources",
-# "mountPath": "/etc/grafana/provisioning/datasources/",
-# "files": [
-# {
-# "path": "datasource-prometheus.yml",
-# "content": (
-# "datasources:\n"
-# " - access: proxy\n"
-# " editable: true\n"
-# " is_default: true\n"
-# " name: osm_prometheus\n"
-# " orgId: 1\n"
-# " type: prometheus\n"
-# " version: 1\n"
-# " url: http://{}:{}\n".format(
-# relation_state.get("prometheus_hostname"),
-# relation_state.get("prometheus_port"),
-# )
-# ),
-# }
-# ],
-# },
-# ],
-# "kubernetes": {
-# "readinessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": port,
-# },
-# "initialDelaySeconds": 10,
-# "periodSeconds": 10,
-# "timeoutSeconds": 5,
-# "successThreshold": 1,
-# "failureThreshold": 3,
-# },
-# "livenessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": port,
-# },
-# "initialDelaySeconds": 60,
-# "timeoutSeconds": 30,
-# "failureThreshold": 10,
-# },
-# },
-# }
-# ],
-# "kubernetesResources": {"ingressResources": []},
-# }
-
-# spec = pod_spec.make_pod_spec(
-# image_info, config, relation_state, app_name, port
-# )
-
-# self.assertDictEqual(expected_result, spec)
-
-# def test_make_pod_spec_with_ingress(self) -> NoReturn:
-# """Testing make pod spec."""
-# image_info = {"upstream-source": "ubuntu/grafana:latest"}
-# config = {
-# "site_url": "https://grafana",
-# "tls_secret_name": "grafana",
-# "max_file_size": 0,
-# "ingress_whitelist_source_range": "0.0.0.0/0",
-# }
-# relation_state = {
-# "prometheus_hostname": "prometheus",
-# "prometheus_port": "9090",
-# }
-# app_name = "grafana"
-# port = 3000
-
-# expected_result = {
-# "version": 3,
-# "containers": [
-# {
-# "name": app_name,
-# "imageDetails": image_info,
-# "imagePullPolicy": "Always",
-# "ports": [
-# {
-# "name": app_name,
-# "containerPort": port,
-# "protocol": "TCP",
-# }
-# ],
-# "envConfig": {},
-# "volumeConfig": [
-# {
-# "name": "dashboards",
-# "mountPath": "/etc/grafana/provisioning/dashboards/",
-# "files": [
-# {
-# "path": "dashboard-osm.yml",
-# "content": (
-# "apiVersion: 1\n"
-# "providers:\n"
-# " - name: 'osm'\n"
-# " orgId: 1\n"
-# " folder: ''\n"
-# " type: file\n"
-# " options:\n"
-# " path: /etc/grafana/provisioning/dashboards/\n"
-# ),
-# }
-# ],
-# },
-# {
-# "name": "datasources",
-# "mountPath": "/etc/grafana/provisioning/datasources/",
-# "files": [
-# {
-# "path": "datasource-prometheus.yml",
-# "content": (
-# "datasources:\n"
-# " - access: proxy\n"
-# " editable: true\n"
-# " is_default: true\n"
-# " name: osm_prometheus\n"
-# " orgId: 1\n"
-# " type: prometheus\n"
-# " version: 1\n"
-# " url: http://{}:{}\n".format(
-# relation_state.get("prometheus_hostname"),
-# relation_state.get("prometheus_port"),
-# )
-# ),
-# }
-# ],
-# },
-# ],
-# "kubernetes": {
-# "readinessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": port,
-# },
-# "initialDelaySeconds": 10,
-# "periodSeconds": 10,
-# "timeoutSeconds": 5,
-# "successThreshold": 1,
-# "failureThreshold": 3,
-# },
-# "livenessProbe": {
-# "httpGet": {
-# "path": "/api/health",
-# "port": port,
-# },
-# "initialDelaySeconds": 60,
-# "timeoutSeconds": 30,
-# "failureThreshold": 10,
-# },
-# },
-# }
-# ],
-# "kubernetesResources": {
-# "ingressResources": [
-# {
-# "name": "{}-ingress".format(app_name),
-# "annotations": {
-# "nginx.ingress.kubernetes.io/proxy-body-size": str(
-# config.get("max_file_size")
-# ),
-# "nginx.ingress.kubernetes.io/whitelist-source-range": config.get(
-# "ingress_whitelist_source_range"
-# ),
-# },
-# "spec": {
-# "rules": [
-# {
-# "host": app_name,
-# "http": {
-# "paths": [
-# {
-# "path": "/",
-# "backend": {
-# "serviceName": app_name,
-# "servicePort": port,
-# },
-# }
-# ]
-# },
-# }
-# ],
-# "tls": [
-# {
-# "hosts": [app_name],
-# "secretName": config.get("tls_secret_name"),
-# }
-# ],
-# },
-# }
-# ],
-# },
-# }
-
-# spec = pod_spec.make_pod_spec(
-# image_info, config, relation_state, app_name, port
-# )
-
-# self.assertDictEqual(expected_result, spec)
-
-# def test_make_pod_spec_without_image_info(self) -> NoReturn:
-# """Testing make pod spec without image_info."""
-# image_info = None
-# config = {
-# "site_url": "",
-# }
-# relation_state = {
-# "prometheus_hostname": "prometheus",
-# "prometheus_port": "9090",
-# }
-# app_name = "grafana"
-# port = 3000
-
-# spec = pod_spec.make_pod_spec(
-# image_info, config, relation_state, app_name, port
-# )
-
-# self.assertIsNone(spec)
-
-# def test_make_pod_spec_without_relation_state(self) -> NoReturn:
-# """Testing make pod spec without relation_state."""
-# image_info = {"upstream-source": "ubuntu/grafana:latest"}
-# config = {
-# "site_url": "",
-# }
-# relation_state = {}
-# app_name = "grafana"
-# port = 3000
-
-# with self.assertRaises(ValueError):
-# pod_spec.make_pod_spec(image_info, config, relation_state, app_name, port)
-
-
-# if __name__ == "__main__":
-# unittest.main()
+++ /dev/null
-# Copyright 2021 Canonical Ltd.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: legal@canonical.com
-#
-# To get in touch with the maintainers, please contact:
-# osm-charmers@lists.launchpad.net
-##
-#######################################################################################
-
-[tox]
-envlist = black, cover, flake8, pylint, yamllint, safety
-skipsdist = true
-
-[tox:jenkins]
-toxworkdir = /tmp/.tox
-
-[testenv]
-basepython = python3.8
-setenv = VIRTUAL_ENV={envdir}
- PYTHONDONTWRITEBYTECODE = 1
-deps = -r{toxinidir}/requirements.txt
-
-
-#######################################################################################
-[testenv:black]
-deps = black
-commands =
- black --check --diff src/ tests/
-
-
-#######################################################################################
-[testenv:cover]
-deps = {[testenv]deps}
- -r{toxinidir}/requirements-test.txt
- coverage
- nose2
-commands =
- sh -c 'rm -f nosetests.xml'
- coverage erase
- nose2 -C --coverage src
- coverage report --omit='*tests*'
- coverage html -d ./cover --omit='*tests*'
- coverage xml -o coverage.xml --omit=*tests*
-whitelist_externals = sh
-
-
-#######################################################################################
-[testenv:flake8]
-deps = flake8
- flake8-import-order
-commands =
- flake8 src/ tests/ --exclude=*pod_spec*
-
-
-#######################################################################################
-[testenv:pylint]
-deps = {[testenv]deps}
- -r{toxinidir}/requirements-test.txt
- pylint==2.10.2
-commands =
- pylint -E src/ tests/
-
-
-#######################################################################################
-[testenv:safety]
-setenv =
- LC_ALL=C.UTF-8
- LANG=C.UTF-8
-deps = {[testenv]deps}
- safety
-commands =
- - safety check --full-report
-
-
-#######################################################################################
-[testenv:yamllint]
-deps = {[testenv]deps}
- -r{toxinidir}/requirements-test.txt
- yamllint
-commands = yamllint .
-
-#######################################################################################
-[testenv:build]
-passenv=HTTP_PROXY HTTPS_PROXY NO_PROXY
-whitelist_externals =
- charmcraft
- sh
-commands =
- charmcraft pack
- sh -c 'ubuntu_version=20.04; \
- architectures="amd64-aarch64-arm64"; \
- charm_name=`cat metadata.yaml | grep -E "^name: " | cut -f 2 -d " "`; \
- mv $charm_name"_ubuntu-"$ubuntu_version-$architectures.charm $charm_name.charm'
-
-#######################################################################################
-[flake8]
-ignore =
- W291,
- W293,
- W503,
- E123,
- E125,
- E226,
- E241,
-exclude =
- .git,
- __pycache__,
- .tox,
-max-line-length = 120
-show-source = True
-builtins = _
-max-complexity = 10
-import-order-style = google