surveil/surveil/cmd/init.py
flavien peyre b5418f6e38 Improve init.py for the demo
Change-Id: Icffad63263f740d22d9803a84bd1e1f0699fb7f5
2015-08-18 15:37:28 +00:00

366 lines
12 KiB
Python

# Copyright 2014 - Savoir-Faire Linux inc.
#
# 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.
"""Script to reinitialize surveil."""
import optparse
import sys
import influxdb
import pecan
from pecan import configuration
import pymongo
from six.moves import configparser
import surveilclient.client as sc
from surveil.cmd import pack_upload
def main():
parser = optparse.OptionParser()
parser.add_option('-d', '--demo',
default=False,
dest='demo',
help="Create fake hosts in Alignak",
action="store_true")
parser.add_option('-i', '--influxdb',
default=False,
dest='influxdb',
help="Pre-create the InfluxDB database",
action='store_true')
parser.add_option('-m', '--mongodb',
default=False,
dest='mongodb',
help="Drop the existing Alignak MongoDB database",
action='store_true')
parser.add_option('-p', '--packs',
default=False,
dest='packs',
help="Upload/Update configuration packs to MongoDB",
action='store_true')
parser.add_option('--pecan_config', '-P',
default='/etc/surveil/config.py',
dest='pecan_config',
help='Pecan config file (config.py)')
parser.add_option('--config_file', '-c',
default='/etc/surveil/surveil.cfg',
dest='config_file',
help='Pecan config file (surveil.cfg)')
opts, _ = parser.parse_args(sys.argv)
surveil_api_url = 'http://localhost:5311/v2'
surveil_auth_url = 'http://localhost:5311/v2/auth'
surveil_api_version = '2_0'
config = configparser.ConfigParser()
config.read(opts.config_file)
surveil_cfg = {"surveil_api_config":
dict([i for i in config.items("surveil")])}
configuration.set_config(surveil_cfg, overwrite=True)
configuration.set_config(opts.pecan_config, overwrite=False)
cli_surveil = sc.Client(surveil_api_url,
auth_url=surveil_auth_url,
version=surveil_api_version)
# Create a basic config in mongodb
mongo = pymongo.MongoClient(pecan.conf.surveil_api_config['mongodb_uri'])
if opts.mongodb is True:
# Drop the current shinken config
print("Dropping existing Alignak MongoDB database...")
mongo.drop_database('shinken')
if opts.influxdb is True:
print("Pre-creating InfluxDB database...")
# Create the InfluxDB database
influx_client = influxdb.InfluxDBClient.from_DSN(
pecan.conf.surveil_api_config['influxdb_uri']
)
databases = influx_client.get_list_database()
if not any(db['name'] == influx_client._database for db in databases):
influx_client.create_database(influx_client._database)
if opts.packs:
print ("Uploading packs...")
# Load the shinken packs
pack_upload.upload_pack(
"/usr/share/monitoring/packs/sfl/openstack-keystone-http/",
cli_surveil
)
pack_upload.upload_pack(
"/usr/share/monitoring/packs/sfl/openstack-glance-http/",
cli_surveil
)
pack_upload.upload_pack(
"/usr/share/monitoring/packs/sfl/generic-host/",
cli_surveil
)
pack_upload.upload_pack(
"/usr/share/monitoring/packs/sfl/linux-system-nrpe/",
cli_surveil
)
pack_upload.upload_pack(
"/usr/share/monitoring/packs/sfl/openstack-nova-http/",
cli_surveil
)
pack_upload.upload_pack(
"/usr/share/monitoring/packs/sfl/openstack-cinder-http/",
cli_surveil
)
pack_upload.upload_pack(
"/usr/share/monitoring/packs/sfl/openstack-host/",
cli_surveil
)
# if --demo is specified, you get more hosts.
if opts.demo is True:
print("Creating demo configuration...")
# shinken's ws-arbiter
cli_surveil.config.hosts.create(
use=["generic-host"],
contact_groups=["admins"],
host_name="ws-arbiter",
address="localhost"
)
cli_surveil.config.services.create(
check_command="check_tcp!7760",
check_interval="5",
check_period="24x7",
contact_groups=["admins"],
contacts=["admin"],
host_name=["ws-arbiter"],
max_check_attempts="5",
notification_interval="30",
notification_period="24x7",
retry_interval="3",
service_description="check-ws-arbiter"
)
# Passive checks host
cli_surveil.config.hosts.create(
host_name='passive_check_host',
use=['generic-host'],
address='127.0.0.1',
passive_checks_enabled='1'
)
# Linux-keystone template
cli_surveil.config.hosts.create(
host_name='test_keystone',
use=['openstack-keystone-http'],
address='127.0.0.1',
custom_fields={
"_OS_AUTH_URL": "bla",
"_OS_USERNAME": "bli",
"_OS_PASSWORD": "blo",
"_OS_TENANT": "blu",
"_KS_SERVICES": "bly",
"parents": "localhost"
}
)
# openstack-host template
cli_surveil.config.hosts.create(
host_name='openstackceilometer-host',
use=['openstack-host'],
address='127.0.0.1',
custom_fields={
"_OS_AUTH_URL": "bla",
"_OS_USERNAME": "bli",
"_OS_PASSWORD": "blo",
"_OS_TENANT_NAME": "blu",
"_KS_SERVICES": "bly",
"parents": "localhost"
}
)
# DOWN HOST (cant resolve)
cli_surveil.config.hosts.create(
host_name='srv-apache-01',
use=['linux-system-nrpe'],
address='srv-apache-01',
custom_fields={
"_TRAFFICLIMIT": "100000",
}
)
# DOWN, and parent down (Network outage)
cli_surveil.config.hosts.create(
host_name='myparentisdown',
address='dfgsdgsdgf',
parents=['srv-apache-01'],
)
# UP host, no template
cli_surveil.config.hosts.create(
host_name='google.com',
address='google.com'
)
# NRPE host, UP
cli_surveil.config.hosts.create(
host_name='srv-monitoring-01',
use=['linux-system-nrpe'],
address='127.0.0.1',
custom_fields={
"_TRAFFICLIMIT": "500000",
}
)
# Has parent, UP
cli_surveil.config.hosts.create(
host_name='sw-iwebcore-01',
parents=['srv-monitoring-01'],
use=['generic-host'],
address='127.0.0.1',
custom_fields={
"_TRAFFICLIMIT": "200000",
}
)
# Has chain of 2 parents, UP
cli_surveil.config.hosts.create(
host_name='srv-ldap-01',
parents=['sw-iwebcore-01'],
use=['generic-host'],
address='127.0.0.1',
custom_fields={
"_TRAFFICLIMIT": "5000000",
}
)
# UP host with down service
cli_surveil.config.hosts.create(
use=["generic-host"],
contact_groups=["admins"],
host_name="myserviceisdown",
address="localhost"
)
cli_surveil.config.services.create(
check_command="check_tcp!4553",
check_interval="5",
check_period="24x7",
contact_groups=["admins"],
contacts=["admin"],
host_name=["myserviceisdown"],
max_check_attempts="5",
notification_interval="30",
notification_period="24x7",
retry_interval="3",
service_description="iamadownservice"
)
cli_surveil.config.businessimpactmodulations.create(
business_impact_modulation_name="demoBIM",
business_impact=42,
modulation_period="24x7"
)
cli_surveil.config.checkmodulations.create(
checkmodulation_name="demoCheckModulation",
check_command="42",
check_period="24x7"
)
cli_surveil.config.commands.create(
command_name="demoCommand",
command_line="ls --all",
module_type="active"
)
cli_surveil.config.contacts.create(
contact_name="demoContact",
host_notifications_enabled=1,
service_notifications_enabled=0,
host_notification_period="24x6",
service_notification_period="12x7",
host_notification_options=["mail", "sms"],
service_notification_options=["mail"],
host_notification_commands=["sms admin"],
service_notification_commands=["send mail to admin"],
email="surveil.demo@gmail.com",
pager="12",
can_submit_commands=1,
is_admin=0,
retain_status_information=1,
retain_nonstatus_information=365,
min_business_impact=24
)
cli_surveil.config.contactgroups.create(
contactgroup_name="BDFL",
members=["demoContact"],
alias="group Alias",
contactgroup_members=["Linus", "Richard"]
)
cli_surveil.config.hostgroups.create(
hostgroup_name="OpenStack01",
members=['sw-iwebcore-01', 'srv-monitoring-01'],
alias="group Alias",
hostgroup_members=["AWS01", "Azure01"],
notes="notes",
notes_url="http://....notes.com",
action_url="mail"
)
cli_surveil.config.macromodulations.create(
macromodulation_name="Demo macroModulation",
modulation_period="24x7",
macro={"Linus": "Linux", "Richard": "Gnu"}
)
cli_surveil.config.notificationways.create(
notificationway_name="Demo motificationway",
host_notification_period="24x7",
service_notification_period="12x7",
host_notification_options=["mail", "sms"],
service_notification_options=["mail"],
host_notification_commands=["sms admin"],
service_notification_commands=["send mail to admin"],
min_business_impact="24"
)
cli_surveil.config.realms.create(
realm_name="Mordor",
realm_members=["Frodon", "Gandalf", "Sauron"],
default=42
)
cli_surveil.config.servicegroups.create(
servicegroup_name="check Openstack",
members=["check-ws-arbiter"],
alias="group Alias",
servicegroup_members=["check Keystone", "check Nova"],
notes="notes",
notes_url="http://....notes.com",
action_url="mail"
)
cli_surveil.config.timeperiods.create(
timeperiod_name="Demo TimePeriod",
exclude=["24x7", "11x12"],
periods={"day": "demo", "night": "demoNight"},
alias="aliasGroup"
)
# Reload the shinken config
cli_surveil.config.reload_config()
if __name__ == "__main__":
main()