~ubuntu-branches/ubuntu/saucy/ceilometer/saucy

« back to all changes in this revision

Viewing changes to ceilometer/storage/sqlalchemy/migrate_repo/versions/016_simpler_alarm.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2013-10-03 08:40:40 UTC
  • mfrom: (1.1.7)
  • Revision ID: package-import@ubuntu.com-20131003084040-47e1qrwl5s5bkwjh
Tags: 2013.2~rc1-0ubuntu1
* debian/patches/fix-setup-requirements.patch: Dropped no longer
  needed.
* debian/patches/skip-database.patch: Refreshed
* debian/control:
  - Add versioned dependency for python-pbr.
  - Bump version dependency for python-webob.
  - Add versioned dependency for alembic.
  - Bump versioned dependency for python-sqlalchemy.
  - Add versioned dependency for python-pymongo.
  - Add versioned dependency for python-eventlet.
  - Dropped python-extras dependency.
  - Bump versioned dependency for python-flask.
  - Bump versioned dependency for python-stevedore.
  - Add versioned dependency for python-glanceclient.
  - Bump versioned dependency for python-novaclient.
  - Bump versioned dependency for python-keystoneclient.
  - Bump versioned dependency for python-ceilometerclient.
  - Add versioned dependency for python-lxml.
  - Bump versioned dependency for python-wsme.
  - Dropped python-netifaces dependency.
  - Added python-httplib2 build dependency.
  - Bump versioned dependency for python-fixtures.
  - Bump versioned dependency for testrepository.
  - Added versioned dependency for python-testtools.
  - Added versioned dependency for python-swiftclient.
  - Dropped python-cinderclient dependency.
  - Dropped python-lockfile dependency.
  - Dropped python-setuptoools-git dependency.
  - Dropped python-unittest2 dependency.
  - Dropped python-d2to1 dependency.
  - Added versioned dependency for python-testtools.
  - Added binary dependency for python-netaddr.
  - Add python-six as a dependency.
* debian/patches/fix-setup-requirements.patch: Bump sqlachemy version.
* debian/ceilometer-common.install:
  - Dropped ceilometer-alarm-singleton, no longer exists.
  - Added usr/bin/ceilometer-alarm-evaluator.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- encoding: utf-8 -*-
 
2
#
 
3
# Copyright © 2013 eNovance <licensing@enovance.com>
 
4
#
 
5
# Author: Mehdi Abaakouk <mehdi.abaakouk@enovance.com>
 
6
#
 
7
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 
8
# not use this file except in compliance with the License. You may obtain
 
9
# a copy of the License at
 
10
#
 
11
#      http://www.apache.org/licenses/LICENSE-2.0
 
12
#
 
13
# Unless required by applicable law or agreed to in writing, software
 
14
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
15
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
16
# License for the specific language governing permissions and limitations
 
17
# under the License.
 
18
 
 
19
import json
 
20
 
 
21
from sqlalchemy import MetaData, Table, Column, Index
 
22
from sqlalchemy import String, Float, Integer, Text
 
23
 
 
24
meta = MetaData()
 
25
 
 
26
 
 
27
def upgrade(migrate_engine):
 
28
    meta.bind = migrate_engine
 
29
    table = Table('alarm', meta, autoload=True)
 
30
 
 
31
    type = Column('type', String(50), default='threshold')
 
32
    type.create(table, populate_default=True)
 
33
 
 
34
    rule = Column('rule', Text())
 
35
    rule.create(table)
 
36
 
 
37
    for row in table.select().execute().fetchall():
 
38
        query = []
 
39
        if row.matching_metadata is not None:
 
40
            matching_metadata = json.loads(row.matching_metadata)
 
41
            for key in matching_metadata:
 
42
                query.append({'field': key,
 
43
                              'op': 'eq',
 
44
                              'value': matching_metadata[key]})
 
45
        rule = {
 
46
            'meter_name': row.meter_name,
 
47
            'comparison_operator': row.comparison_operator,
 
48
            'threshold': row.threshold,
 
49
            'statistic': row.statistic,
 
50
            'evaluation_periods': row.evaluation_periods,
 
51
            'period': row.period,
 
52
            'query': query
 
53
        }
 
54
        table.update().where(table.c.id == row.id).values(rule=rule).execute()
 
55
 
 
56
    index = Index('ix_alarm_counter_name', table.c.meter_name)
 
57
    index.drop(bind=migrate_engine)
 
58
    table.c.meter_name.drop()
 
59
    table.c.comparison_operator.drop()
 
60
    table.c.threshold.drop()
 
61
    table.c.statistic.drop()
 
62
    table.c.evaluation_periods.drop()
 
63
    table.c.period.drop()
 
64
    table.c.matching_metadata.drop()
 
65
 
 
66
 
 
67
def downgrade(migrate_engine):
 
68
    meta.bind = migrate_engine
 
69
    table = Table('alarm', meta, autoload=True)
 
70
 
 
71
    columns = [
 
72
        Column('meter_name', String(255)),
 
73
        Column('comparison_operator', String(2)),
 
74
        Column('threshold', Float),
 
75
        Column('statistic', String(255)),
 
76
        Column('evaluation_periods', Integer),
 
77
        Column('period', Integer),
 
78
        Column('matching_metadata', Text())
 
79
    ]
 
80
    for c in columns:
 
81
        c.create(table)
 
82
 
 
83
    for row in table.select().execute().fetchall():
 
84
        if row.type != 'threshold':
 
85
            #note: type insupported in previous version
 
86
            table.delete().where(table.c.id == row.id).execute()
 
87
        else:
 
88
            rule = json.loads(row.rule)
 
89
            values = {'comparison_operator': rule['comparison_operator'],
 
90
                      'threshold': float(rule['threshold']),
 
91
                      'statistic': rule['statistic'],
 
92
                      'evaluation_periods': int(rule['evaluation_periods']),
 
93
                      'period': int(rule['period']),
 
94
                      'meter_name': int(rule['mater_name']),
 
95
                      'matching_metadata': {}}
 
96
 
 
97
            #note: op are ignored because previous format don't support it
 
98
            for q in rule['query']:
 
99
                values['matching_metadata'][q['field']] = q['value']
 
100
            values['matching_metadata'] = json.dumps(
 
101
                values['matching_metadata'])
 
102
            table.update().where(table.c.id == row.id
 
103
                                 ).values(**values).execute()
 
104
 
 
105
    index = Index('ix_alarm_counter_name', table.c.meter_name)
 
106
    index.create(bind=migrate_engine)
 
107
 
 
108
    table.c.type.drop()
 
109
    table.c.rule.drop()