summaryrefslogtreecommitdiffstats
path: root/deploy/cloud/configure_settings.py
blob: b60a60fd17b6cdf1ab0c4bc0e7d645a5f0f0918b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
###############################################################################
# Copyright (c) 2015 Ericsson AB and others.
# szilard.cserey@ericsson.com
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
###############################################################################


import yaml
import io

from common import (
    exec_cmd,
    check_file_exists,
    log,
    backup,
)


class ConfigureSettings(object):

    def __init__(self, yaml_config_dir, env_id, dea):
        self.yaml_config_dir = yaml_config_dir
        self.env_id = env_id
        self.dea = dea

    def download_settings(self):
        log('Download settings for environment %s' % self.env_id)
        exec_cmd('fuel settings --env %s --download --dir %s'
                 % (self.env_id, self.yaml_config_dir))

    def upload_settings(self):
        log('Upload settings for environment %s' % self.env_id)
        exec_cmd('fuel settings --env %s --upload --dir %s'
                 % (self.env_id, self.yaml_config_dir))

    def config_settings(self):
        log('Configure settings')
        self.download_settings()
        self.modify_settings()
        self.upload_settings()

    def modify_settings(self):
        log('Modify settings for environment %s' % self.env_id)
        settings_yaml = ('%s/settings_%s.yaml'
                         % (self.yaml_config_dir, self.env_id))
        check_file_exists(settings_yaml)

        with io.open(settings_yaml, 'r') as stream:
            orig_dea = yaml.load(stream)

        backup(settings_yaml)
        settings = self.dea.get_property('settings')
        # Copy fuel defined plugin_id's to user defined settings
        # From Fuel 8.0 chosen_id was added because it is now
        # possible to install many version of the same plugin
        # but we will install only one version
        for plugin in orig_dea['editable']:
            if 'metadata' in orig_dea['editable'][plugin]:
                if 'plugin_id' in orig_dea['editable'][plugin]['metadata']:
                    if not plugin in settings['editable']:
                        settings['editable'][plugin] = orig_dea['editable'][plugin]
                    else:
                        settings['editable'][plugin]["metadata"]["plugin_id"] = orig_dea['editable'][plugin]["metadata"]["plugin_id"]
                elif 'chosen_id' in orig_dea['editable'][plugin]['metadata']:
                    if not plugin in settings['editable']:
                        settings['editable'][plugin] = orig_dea['editable'][plugin]
                    else:
                        settings['editable'][plugin]['metadata']['chosen_id'] = orig_dea['editable'][plugin]['metadata']['chosen_id']
                        settings['editable'][plugin]['metadata']['versions'][0]['metadata']['plugin_id'] = orig_dea['editable'][plugin]['metadata']['versions'][0]['metadata']['plugin_id']

        with io.open(settings_yaml, 'w') as stream:
            yaml.dump(settings, stream, default_flow_style=False)
tsc_error; unsigned __int128 avg_squares_tsc_error = lat_test->var_lat_error / lat_test->tot_pkts; uint64_t var_tsc_error = avg_squares_tsc_error + avg_tsc_squared_error; /* sqrt(a+-b) = sqrt(a) +- (-sqrt(a) + sqrt(a + b)) */ uint64_t stddev_tsc_error = - stddev_tsc + sqrt(var_tsc + var_tsc_error); struct time_unit_err ret = { .time = tsc_to_time_unit(stddev_tsc), .error = tsc_to_time_unit(stddev_tsc_error), }; return ret; } static void _lat_test_histogram_combine(struct lat_test *dst, struct lat_test *src) { for (size_t i = 0; i < sizeof(dst->buckets)/sizeof(dst->buckets[0]); ++i) dst->buckets[i] += src->buckets[i]; } static void lat_test_combine(struct lat_test *dst, struct lat_test *src) { dst->tot_all_pkts += src->tot_all_pkts; dst->tot_pkts += src->tot_pkts; dst->tot_lat += src->tot_lat; dst->tot_lat_error += src->tot_lat_error; /* (a +- b)^2 = a^2 +- (2ab + b^2) */ dst->var_lat += src->var_lat; dst->var_lat_error += src->var_lat_error; if (src->max_lat > dst->max_lat) { dst->max_lat = src->max_lat; dst->max_lat_error = src->max_lat_error; } if (src->min_lat < dst->min_lat) { dst->min_lat = src->min_lat; dst->min_lat_error = src->min_lat_error; } if (src->accuracy_limit_tsc > dst->accuracy_limit_tsc) dst->accuracy_limit_tsc = src->accuracy_limit_tsc; dst->lost_packets += src->lost_packets; #ifdef LATENCY_HISTOGRAM _lat_test_histogram_combine(dst, src); #endif } static void lat_test_reset(struct lat_test *lat_test) { lat_test->tot_all_pkts = 0; lat_test->tot_pkts = 0; lat_test->max_lat = 0; lat_test->min_lat = -1; lat_test->tot_lat = 0; lat_test->var_lat = 0; lat_test->max_lat_error = 0; lat_test->min_lat_error = 0; lat_test->tot_lat_error = 0; lat_test->var_lat_error = 0; lat_test->accuracy_limit_tsc = 0; lat_test->lost_packets = 0; memset(lat_test->buckets, 0, sizeof(lat_test->buckets)); } static void lat_test_copy(struct lat_test *dst, struct lat_test *src) { if (src->tot_all_pkts) memcpy(dst, src, sizeof(struct lat_test)); } struct task_lat; struct lat_test *task_lat_get_latency_meassurement(struct task_lat *task); void task_lat_use_other_latency_meassurement(struct task_lat *task); void task_lat_set_accuracy_limit(struct task_lat *task, uint32_t accuracy_limit_nsec); #endif /* _HANDLE_LAT_H_ */