Example #1
0
    def init_host(self):
        # Use the nova configuration flags to get
        # a connection to the RPC mechanism nova
        # is using.
        self.connection = nova_rpc.create_connection()

        storage.register_opts(cfg.CONF)
        self.storage_engine = storage.get_engine(cfg.CONF)
        self.storage_conn = self.storage_engine.get_connection(cfg.CONF)

        self.compute_handler = dispatcher.NotificationDispatcher(
            COMPUTE_COLLECTOR_NAMESPACE,
            self._publish_counter,
            )
        # FIXME(dhellmann): Should be using create_worker(), except
        # that notification messages do not conform to the RPC
        # invocation protocol (they do not include a "method"
        # parameter).
        self.connection.declare_topic_consumer(
            topic='%s.info' % flags.FLAGS.notification_topics[0],
            callback=self.compute_handler.notify)

        # Set ourselves up as a separate worker for the metering data,
        # since the default for manager is to use create_consumer().
        self.connection.create_worker(
            cfg.CONF.metering_topic,
            rpc_dispatcher.RpcDispatcher([self]),
            'ceilometer.collector.' + cfg.CONF.metering_topic,
            )

        self.connection.consume_in_thread()
Example #2
0
    def start(self):
        super(CollectorService, self).start()

        storage.register_opts(cfg.CONF)
        self.storage_engine = storage.get_engine(cfg.CONF)
        self.storage_conn = self.storage_engine.get_connection(cfg.CONF)

        self.ext_manager = extension_manager.ActivatedExtensionManager(
            namespace=self.COLLECTOR_NAMESPACE,
            disabled_names=cfg.CONF.disabled_notification_listeners,
            )

        if not list(self.ext_manager):
            LOG.warning('Failed to load any notification handlers for %s',
                        self.COLLECTOR_NAMESPACE)

        self.ext_manager.map(self._setup_subscription)

        # Set ourselves up as a separate worker for the metering data,
        # since the default for service is to use create_consumer().
        self.conn.create_worker(
            cfg.CONF.metering_topic,
            rpc_dispatcher.RpcDispatcher([self]),
            'ceilometer.collector.' + cfg.CONF.metering_topic,
            )
 def test_register_opts(self):
     self.stubs.Set(storage, 'get_engine', self.faux_get_engine)
     self._faux_engine = self.mox.CreateMock(base.StorageEngine)
     self._faux_engine.register_opts(cfg.CONF)
     self.mox.ReplayAll()
     storage.register_opts(cfg.CONF)
     self.mox.VerifyAll()
 def test_register_opts(self):
     self.stubs.Set(storage, 'get_engine', self.faux_get_engine)
     self._faux_engine = self.mox.CreateMock(base.StorageEngine)
     self._faux_engine.register_opts(cfg.CONF)
     self.mox.ReplayAll()
     storage.register_opts(cfg.CONF)
     self.mox.VerifyAll()
Example #5
0
    def init_host(self):
        # Use the nova configuration flags to get
        # a connection to the RPC mechanism nova
        # is using.
        self.connection = rpc.create_connection()

        storage.register_opts(cfg.CONF)
        self.storage_engine = storage.get_engine(cfg.CONF)
        self.storage_conn = self.storage_engine.get_connection(cfg.CONF)

        self.handler = dispatcher.NotificationDispatcher(
            COLLECTOR_NAMESPACE,
            self._publish_counter,
        )
        # FIXME(dhellmann): Should be using create_worker(), except
        # that notification messages do not conform to the RPC
        # invocation protocol (they do not include a "method"
        # parameter).
        for topic in self.handler.topics:
            self.connection.declare_topic_consumer(
                topic=topic,
                queue_name="ceilometer.notifications",
                callback=functools.partial(self.handler.notify, topic))

        # Set ourselves up as a separate worker for the metering data,
        # since the default for manager is to use create_consumer().
        self.connection.create_worker(
            cfg.CONF.metering_topic,
            rpc_dispatcher.RpcDispatcher([self]),
            'ceilometer.collector.' + cfg.CONF.metering_topic,
        )

        self.connection.consume_in_thread()
def main(argv):
    extra_args = cfg.CONF(
        sys.argv[1:],
        # NOTE(dhellmann): Read the configuration file(s) for the
        #ceilometer collector by default.
        default_config_files=['/etc/ceilometer/ceilometer.conf'],
        )
    storage.register_opts(cfg.CONF)
    db = storage.get_connection(cfg.CONF)
    command = extra_args[0] if extra_args else 'help'
    COMMANDS[command](db, extra_args[1:])
Example #7
0
def main(argv):
    extra_args = cfg.CONF(
        sys.argv[1:],
        # NOTE(dhellmann): Read the configuration file(s) for the
        #ceilometer collector by default.
        default_config_files=['/etc/ceilometer-collector.conf'],
        )
    storage.register_opts(cfg.CONF)
    db = storage.get_connection(cfg.CONF)
    command = extra_args[0] if extra_args else 'help'
    COMMANDS[command](db, extra_args[1:])
Example #8
0
    def init_host(self):
        # Use the nova configuration flags to get
        # a connection to the RPC mechanism nova
        # is using.
        self.connection = rpc.create_connection()

        storage.register_opts(cfg.CONF)
        self.storage_engine = storage.get_engine(cfg.CONF)
        self.storage_conn = self.storage_engine.get_connection(cfg.CONF)

        self.handlers = self._load_plugins(self.COLLECTOR_NAMESPACE)

        if not self.handlers:
            LOG.warning('Failed to load any notification handlers for %s',
                        self.plugin_namespace)

        # FIXME(dhellmann): Should be using create_worker(), except
        # that notification messages do not conform to the RPC
        # invocation protocol (they do not include a "method"
        # parameter).
        # FIXME(dhellmann): Break this out into its own method
        # so we can test the subscription logic.
        for handler in self.handlers:
            LOG.debug('Event types: %r', handler.get_event_types())
            for exchange_topic in handler.get_exchange_topics(cfg.CONF):
                for topic in exchange_topic.topics:
                    self.connection.declare_topic_consumer(
                        queue_name="ceilometer.notifications",
                        topic=topic,
                        exchange_name=exchange_topic.exchange,
                        callback=self.process_notification,
                        )

        # Set ourselves up as a separate worker for the metering data,
        # since the default for manager is to use create_consumer().
        self.connection.create_worker(
            cfg.CONF.metering_topic,
            rpc_dispatcher.RpcDispatcher([self]),
            'ceilometer.collector.' + cfg.CONF.metering_topic,
            )

        self.connection.consume_in_thread()
Example #9
0
 def init_host(self):
     storage.register_opts(CONF)
     self.storage_engine = storage.get_engine(CONF)
     self.storage_conn = self.storage_engine.get_connection(CONF)
     self.price_list = price.PriceList() 
     self.items = CONF.supported_items
     self.db_api = db.get_api()
     self.db_api.configure_db()
     self.price_counter = price.PriceCounter(self.db_api)
     # Create scoped token for admin.
     unscoped_token = nova_client.token_create(CONF.admin_user,
                                               CONF.admin_password)
     tenants = nova_client.tenant_list_for_token(unscoped_token.id)
     token = nova_client.token_create(CONF.admin_user,
                                      CONF.admin_password,
                                      tenants[0].id)
     self.cred = {"username": CONF.admin_user,
                  "password": CONF.admin_password,
                  "tenant_id": tenants[0].id,
                  "token": token}
     return
Example #10
0
 def init_host(self):
     storage.register_opts(CONF)
     self.storage_engine = storage.get_engine(CONF)
     self.storage_conn = self.storage_engine.get_connection(CONF)
     self.price_list = price.PriceList()
     self.items = CONF.supported_items
     self.db_api = db.get_api()
     self.db_api.configure_db()
     self.price_counter = price.PriceCounter(self.db_api)
     # Create scoped token for admin.
     unscoped_token = nova_client.token_create(CONF.admin_user,
                                               CONF.admin_password)
     tenants = nova_client.tenant_list_for_token(unscoped_token.id)
     token = nova_client.token_create(CONF.admin_user, CONF.admin_password,
                                      tenants[0].id)
     self.cred = {
         "username": CONF.admin_user,
         "password": CONF.admin_password,
         "tenant_id": tenants[0].id,
         "token": token
     }
     return
Example #11
0
    def start(self):
        super(CollectorService, self).start()

        storage.register_opts(cfg.CONF)
        self.storage_engine = storage.get_engine(cfg.CONF)
        self.storage_conn = self.storage_engine.get_connection(cfg.CONF)
Example #12
0
"""Set up the API server application instance
"""

import flask

from ceilometer.openstack.common import cfg
from ceilometer.openstack.common import jsonutils
from ceilometer import storage
from ceilometer.api import v1
from ceilometer.api import acl


app = flask.Flask('ceilometer.api')
app.register_blueprint(v1.blueprint, url_prefix='/v1')

storage.register_opts(cfg.CONF)


@app.before_request
def attach_config():
    flask.request.cfg = cfg.CONF
    storage_engine = storage.get_engine(cfg.CONF)
    flask.request.storage_engine = storage_engine
    flask.request.storage_conn = storage_engine.get_connection(cfg.CONF)


@app.before_request
def attach_sources():
    with open("sources.json", "r") as f:
        flask.request.sources = jsonutils.load(f)
Example #13
0
    def start(self):
        super(CollectorService, self).start()

        storage.register_opts(cfg.CONF)
        self.storage_engine = storage.get_engine(cfg.CONF)
        self.storage_conn = self.storage_engine.get_connection(cfg.CONF)
Example #14
0
# 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.
"""Set up the API server application instance."""

import flask
from oslo.config import cfg

from ceilometer.api import acl
from ceilometer.api.v1 import blueprint as v1_blueprint
from ceilometer.openstack.common import jsonutils
from ceilometer import storage


storage.register_opts(cfg.CONF)


def make_app(conf, enable_acl=True, attach_storage=True):
    app = flask.Flask('ceilometer.api')
    app.register_blueprint(v1_blueprint.blueprint, url_prefix='/v1')

    try:
        with open("sources.json", "r") as f:
            sources = jsonutils.load(f)
    except IOError:
        sources = {}

    @app.before_request
    def attach_config():
        flask.request.cfg = conf
Example #15
0
def get_storage_connection(conf):
    storage.register_opts(conf)
    storage_engine = storage.get_engine(conf)
    return storage_engine.get_connection(conf)
Example #16
0
def get_storage_connection(conf):
    storage.register_opts(conf)
    storage_engine = storage.get_engine(conf)
    return storage_engine.get_connection(conf)