From 1b723946ef7b5736048cf2d45f3eadb0e2255940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20M=C3=A1gr?= Date: Fri, 11 Apr 2025 10:47:21 +0200 Subject: [PATCH 1/2] Improve devstack plugin configuration This patch: - adds possibility to set required configuration for prometheus collector - adds possibility to set required configuration for prometheus fetcher - adds possibility to use user created metrics.yml Change-Id: I05cae8b8e7168883ccb593a51f5aa807bc16b22d --- devstack/plugin.sh | 11 +++++++++-- devstack/settings | 6 +++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/devstack/plugin.sh b/devstack/plugin.sh index e2f87f91..2491ab7b 100755 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -110,7 +110,7 @@ function configure_cloudkitty { iniset $CLOUDKITTY_CONF oslo_policy policy_file 'policy.yaml' cp $CLOUDKITTY_DIR$CLOUDKITTY_CONF_DIR/api_paste.ini $CLOUDKITTY_CONF_DIR - cp $CLOUDKITTY_DIR$CLOUDKITTY_CONF_DIR/metrics.yml $CLOUDKITTY_CONF_DIR + cp $CLOUDKITTY_METRICS_CONF $CLOUDKITTY_CONF_DIR iniset_rpc_backend cloudkitty $CLOUDKITTY_CONF DEFAULT iniset $CLOUDKITTY_CONF DEFAULT notification_topics 'notifications' @@ -135,6 +135,10 @@ function configure_cloudkitty { iniset $CLOUDKITTY_CONF "fetcher_$CLOUDKITTY_FETCHER" auth_section authinfos if [[ "$CLOUDKITTY_FETCHER" == "keystone" ]]; then iniset $CLOUDKITTY_CONF fetcher_keystone keystone_version 3 + elif [ $CLOUDKITTY_FETCHER == 'prometheus' ]; then + iniset $CLOUDKITTY_CONF "fetcher_prometheus" prometheus_url $CLOUDKITTY_PROMETHEUS_URL + iniset $CLOUDKITTY_CONF "fetcher_prometheus" metric $CLOUDKITTY_FETCHER_METRIC + iniset $CLOUDKITTY_CONF "fetcher_prometheus" scope_attribute $CLOUDKITTY_FETCHER_SCOPE_ATTRIBUTE fi if [ "$CLOUDKITTY_STORAGE_BACKEND" == "influxdb" ] && [ "$CLOUDKITTY_INFLUX_VERSION" == 1 ]; then @@ -166,7 +170,10 @@ function configure_cloudkitty { # collect iniset $CLOUDKITTY_CONF collect collector $CLOUDKITTY_COLLECTOR iniset $CLOUDKITTY_CONF "collector_${CLOUDKITTY_COLLECTOR}" auth_section authinfos - iniset $CLOUDKITTY_CONF collect metrics_conf $CLOUDKITTY_CONF_DIR/$CLOUDKITTY_METRICS_CONF + if [ $CLOUDKITTY_COLLECTOR == 'prometheus' ]; then + iniset $CLOUDKITTY_CONF collector_prometheus prometheus_url $CLOUDKITTY_PROMETHEUS_URL + fi + iniset $CLOUDKITTY_CONF collect metrics_conf $CLOUDKITTY_CONF_DIR/$(basename $CLOUDKITTY_METRICS_CONF) # DO NOT DO THIS IN PRODUCTION! This is done in order to get data quicker # when starting a devstack installation, but is NOT a recommended setting iniset $CLOUDKITTY_CONF collect wait_periods 0 diff --git a/devstack/settings b/devstack/settings index 9497b464..13b12e35 100644 --- a/devstack/settings +++ b/devstack/settings @@ -41,10 +41,14 @@ CLOUDKITTY_PRICING_TENANT=${CLOUDKITTY_PRICING_TENANT:-"demo"} # Set CloudKitty fetcher info CLOUDKITTY_FETCHER=${CLOUDKITTY_FETCHER:-gnocchi} +# Prometheus fetcher related setting +CLOUDKITTY_FETCHER_METRIC=${CLOUDKITTY_FETCHER_METRIC:-openstack_identity_projects_info} +CLOUDKITTY_FETCHER_SCOPE_ATTRIBUTE=${CLOUDKITTY_FETCHER_SCOPE_ATTRIBUTE:-id} # Set CloudKitty collect info CLOUDKITTY_COLLECTOR=${CLOUDKITTY_COLLECTOR:-gnocchi} -CLOUDKITTY_METRICS_CONF=metrics.yml +CLOUDKITTY_METRICS_CONF=${CLOUDKITTY_METRICS_CONF:-$CLOUDKITTY_DIR$CLOUDKITTY_CONF_DIR/metrics.yml} +CLOUDKITTY_PROMETHEUS_URL=${CLOUDKITTY_PROMETHEUS_URL:-http://localhost:9090/api/v1} # Set CloudKitty storage info CLOUDKITTY_STORAGE_BACKEND=${CLOUDKITTY_STORAGE_BACKEND:-"influxdb"} From f87d3e48bed0254a54fe512b585cab47043bf142 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Fri, 30 May 2025 11:59:47 +0900 Subject: [PATCH 2/2] Replace deprecated datetime.datetime.utcnow It was deprecated in Python 3.12 . Change-Id: I671dc63a6c39a52f9be045ab40e36433af34d84f --- cloudkitty/tests/test_state.py | 6 +++--- contrib/ci/csv_writer.py | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cloudkitty/tests/test_state.py b/cloudkitty/tests/test_state.py index 96ca6cb2..1a5901ab 100644 --- a/cloudkitty/tests/test_state.py +++ b/cloudkitty/tests/test_state.py @@ -13,7 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. # -import datetime +from oslo_utils import timeutils from cloudkitty import state from cloudkitty import tests @@ -29,14 +29,14 @@ def test_gen_name(self): self.assertEqual(name, 'testuser_osrtf') def test_state_access(self): - now = datetime.datetime.utcnow() + now = timeutils.utcnow() self.sm.set_state(now) result = self.sm.get_state() self.assertEqual(result, str(now)) def test_metadata_access(self): metadata = {'foo': 'bar'} - now = datetime.datetime.utcnow() + now = timeutils.utcnow() self.sm.set_state(now) self.sm.set_metadata(metadata) result = self.sm.get_metadata() diff --git a/contrib/ci/csv_writer.py b/contrib/ci/csv_writer.py index 11a39fe6..8165e0bd 100755 --- a/contrib/ci/csv_writer.py +++ b/contrib/ci/csv_writer.py @@ -22,6 +22,8 @@ import sys import uuid +from oslo_utils import timeutils + from cloudkitty import json_utils as json @@ -588,7 +590,7 @@ def main(): generators = [compute, image, volume, net_bw, floating] # Date - now = datetime.datetime.utcnow() + now = timeutils.utcnow() hour_delta = datetime.timedelta(hours=1) cur_date = now.replace(day=1, hour=0, minute=0, second=0, microsecond=0) cur_month = cur_date.month