misc: remove obsolete/never used piwik support (#30973)
This commit is contained in:
parent
5bf6f72d9f
commit
811c05bfd1
|
@ -26,7 +26,6 @@ WELCO_MANAGE_COMMAND = 'sudo -u welco /usr/bin/welco-manage'
|
|||
MANDAYEJS_MANAGE_COMMAND = 'sudo -u mandayejs /usr/bin/mandayejs-manage'
|
||||
CHRONO_MANAGE_COMMAND = 'sudo -u chrono /usr/bin/chrono-manage'
|
||||
CORBO_MANAGE_COMMAND = 'sudo -u corbo /usr/bin/corbo-manage'
|
||||
PIWIK_MANAGE_COMMAND = 'sudo -u hobo-piwik /usr/bin/piwik-manage.py'
|
||||
BIJOE_MANAGE_COMMAND = 'sudo -u bijoe /usr/bin/bijoe-manage'
|
||||
HOBO_MANAGE_COMMAND = 'sudo -u hobo /usr/bin/hobo-manage'
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ hobo-agent ALL=(welco)NOPASSWD:/usr/bin/welco-manage hobo_deploy * -
|
|||
hobo-agent ALL=(mandayejs)NOPASSWD:/usr/bin/mandayejs-manage hobo_deploy * -
|
||||
hobo-agent ALL=(chrono)NOPASSWD:/usr/bin/chrono-manage hobo_deploy * -
|
||||
hobo-agent ALL=(corbo)NOPASSWD:/usr/bin/corbo-manage hobo_deploy * -
|
||||
hobo-agent ALL=(hobo-piwik)NOPASSWD:/usr/bin/piwik-manage hobo_deploy * -
|
||||
hobo-agent ALL=(bijoe)NOPASSWD:/usr/bin/bijoe-manage hobo_deploy * -
|
||||
hobo-agent ALL=(hobo)NOPASSWD:/usr/bin/hobo-manage hobo_deploy * -
|
||||
|
||||
|
@ -20,6 +19,5 @@ hobo-agent ALL=(welco)NOPASSWD:/usr/bin/welco-manage hobo_notify -
|
|||
hobo-agent ALL=(mandayejs)NOPASSWD:/usr/bin/mandayejs-manage hobo_notify -
|
||||
hobo-agent ALL=(chrono)NOPASSWD:/usr/bin/chrono-manage hobo_notify -
|
||||
hobo-agent ALL=(corbo)NOPASSWD:/usr/bin/corbo-manage hobo_notify -
|
||||
hobo-agent ALL=(hobo-piwik)NOPASSWD:/usr/bin/piwik-manage hobo_notify -
|
||||
hobo-agent ALL=(bijoe)NOPASSWD:/usr/bin/bijoe-manage hobo_notify -
|
||||
hobo-agent ALL=(hobo)NOPASSWD:/usr/bin/hobo-manage hobo_notify -
|
||||
|
|
|
@ -48,10 +48,3 @@ Depends: python-hobo (= ${binary:Version}),
|
|||
sudo,
|
||||
supervisor
|
||||
Description: Rapid Remote Deployment Agent
|
||||
|
||||
Package: hobo-piwik
|
||||
Architecture: all
|
||||
Depends: python-requests,
|
||||
python-raven,
|
||||
python-graypy
|
||||
Description: Piwik Publik Deployment Script
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
/var/log/hobo-piwik
|
|
@ -1 +0,0 @@
|
|||
debian/piwik/piwik-manage /usr/bin/
|
|
@ -1,34 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
NAME="hobo-piwik"
|
||||
USER=$NAME
|
||||
GROUP=$NAME
|
||||
|
||||
case "$1" in
|
||||
configure)
|
||||
|
||||
# make sure the administrative user exists
|
||||
if ! getent passwd $USER >/dev/null; then
|
||||
adduser --disabled-password --quiet --system \
|
||||
--no-create-home --home /nonexistent \
|
||||
--gecos "$NAME software user" --group $GROUP
|
||||
fi
|
||||
# ensure dirs ownership
|
||||
chown $USER:$GROUP /var/log/$NAME
|
||||
;;
|
||||
|
||||
abort-upgrade|abort-remove|abort-deconfigure)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "postinst called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
|
|
@ -1,283 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import string
|
||||
import random
|
||||
import logging
|
||||
from logging.config import dictConfig
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': False,
|
||||
'handlers': {
|
||||
'console': {
|
||||
'level': 'DEBUG',
|
||||
'class': 'logging.StreamHandler',
|
||||
},
|
||||
'syslog': {
|
||||
'level': 'DEBUG',
|
||||
'address': '/dev/log',
|
||||
'class': 'logging.handlers.SysLogHandler',
|
||||
'formatter': 'syslog',
|
||||
},
|
||||
},
|
||||
'formatters': {
|
||||
'syslog': {
|
||||
'format': '%(levelname)s %(name)s.%(funcName)s: %(message)s',
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'': {
|
||||
'handlers': ['console', 'syslog'],
|
||||
'level': 'DEBUG',
|
||||
'propragate': True,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Graylog support
|
||||
if 'GRAYLOG_URL' in os.environ:
|
||||
try:
|
||||
from graypy import GELFHandler
|
||||
except ImportError:
|
||||
raise Exception('cannot configure graypy, import of GELFHandler failed')
|
||||
else:
|
||||
host = os.environ['GRAYLOG_URL'].split(':')[0]
|
||||
port = int(os.environ['GRAYLOG_URL'].split(':')[1])
|
||||
LOGGING['handlers']['gelf'] = {
|
||||
'class': 'graypy.GELFHandler',
|
||||
'fqdn': True,
|
||||
'host': host,
|
||||
'port': port,
|
||||
}
|
||||
LOGGING['loggers']['']['handlers'].append('gelf')
|
||||
|
||||
|
||||
if 'SENTRY_DSN' in os.environ:
|
||||
try:
|
||||
from raven.handlers.logging import SentryHandler
|
||||
except ImportError:
|
||||
raise Exception('cannot configure sentry, import of SentryHandler failed')
|
||||
else:
|
||||
SENTRY_DSN = os.environ['SENTRY_DSN']
|
||||
LOGGING['handlers']['sentry'] = {
|
||||
'level': 'ERROR',
|
||||
'class': 'raven.handlers.logging.SentryHandler',
|
||||
'dsn': SENTRY_DSN,
|
||||
}
|
||||
LOGGING['loggers']['']['handlers'].append('sentry')
|
||||
|
||||
|
||||
dictConfig(LOGGING)
|
||||
|
||||
logger = logging.getLogger('piwik_manage')
|
||||
|
||||
TOKEN_OAUTH_PATH = '/etc/piwik/token.json'
|
||||
|
||||
|
||||
class PiwikApi(object):
|
||||
|
||||
default_payload = {
|
||||
'module': 'API',
|
||||
'format': 'JSON'
|
||||
}
|
||||
|
||||
def __init__(self, url, token_auth=None, auth=()):
|
||||
self.url = url
|
||||
self.auth = auth
|
||||
self.default_payload['token_auth'] = token_auth
|
||||
|
||||
def call(self, data):
|
||||
data.update(self.default_payload)
|
||||
logger.debug("PAYLOAD : {}".format(data), extra={'piwik_api_payload': data})
|
||||
response = requests.post(self.url, data=data, auth=self.auth)
|
||||
logger.debug("response status code : {}".format(response.status_code), extra={
|
||||
'piwik_api_response_status_code': response.status_code})
|
||||
logger.debug("response content : {}".format(response.content), extra={
|
||||
'piwik_api_response_content': response.content})
|
||||
return response.json()
|
||||
|
||||
def get_all_sites(self):
|
||||
return self.call({'method': 'SitesManager.getAllSites'})
|
||||
|
||||
def get_sites_groups(self):
|
||||
return self.call({'method': 'SitesManager.getSitesGroups'})
|
||||
|
||||
def get_sites_from_group(self, group):
|
||||
return self.call({
|
||||
'method': 'SitesManager.getSitesFromGroup',
|
||||
'group': group,
|
||||
})
|
||||
|
||||
def _site_method_common(self, payload, **kwargs):
|
||||
urls = kwargs.get('urls', [])
|
||||
group = kwargs.get('group', None)
|
||||
if urls :
|
||||
urls = {'urls[{}]'.format(i) : url for i,url in enumerate(urls)}
|
||||
payload.update(urls)
|
||||
if group:
|
||||
payload['group'] = group
|
||||
|
||||
return self.call(payload)
|
||||
|
||||
def add_site(self, site_name, urls=[], group=None):
|
||||
payload = {
|
||||
'method': 'SitesManager.addSite',
|
||||
'siteName': site_name
|
||||
}
|
||||
return self._site_method_common(payload, urls=urls, group=group)
|
||||
|
||||
|
||||
def update_site(self, id_site, site_name, urls=[], group=None):
|
||||
payload = {
|
||||
'method': 'SitesManager.updateSite',
|
||||
'siteName': site_name,
|
||||
'idSite': id_site
|
||||
}
|
||||
return self._site_method_common(payload, urls=urls, group=group)
|
||||
|
||||
def get_users(self, user_logins=[]):
|
||||
payload = {
|
||||
'method': 'UsersManager.getUsers',
|
||||
'userLogins': ','.join(user_logins)
|
||||
}
|
||||
return self.call(payload)
|
||||
|
||||
def _user_method_common(self, user_login, password, email, **kwargs):
|
||||
payload = {
|
||||
'method': 'UsersManager.addUser',
|
||||
'userLogin': user_login,
|
||||
'password': password,
|
||||
'email': email
|
||||
}
|
||||
return self.call(payload)
|
||||
|
||||
def add_user(self, *args, **kwargs):
|
||||
kwargs['method'] = 'UsersManager.addUser'
|
||||
return self._user_method_common(*args, **kwargs)
|
||||
|
||||
def update_user(self, user_login, password, email):
|
||||
kwargs['method'] = 'UsersManager.updateUser'
|
||||
return self._user_method_common(*args, **kwargs)
|
||||
|
||||
def delete_user(self, user_login):
|
||||
payload = {
|
||||
'method': 'UsersManager.deleteUser',
|
||||
'userLogin': user_login
|
||||
}
|
||||
return self.call(payload)
|
||||
|
||||
|
||||
def user_exists(self, user_login):
|
||||
payload = {
|
||||
'method': 'UsersManager.userExists',
|
||||
'userLogin': user_login
|
||||
}
|
||||
return self.call(payload)
|
||||
|
||||
def set_user_access(self, user_login, id_site, access='view'):
|
||||
payload = {
|
||||
'method': 'UsersManager.setUserAccess',
|
||||
'userLogin': user_login,
|
||||
'idSites': id_site,
|
||||
'access': access
|
||||
}
|
||||
return self.call(payload)
|
||||
|
||||
def get_users_with_site_access(self, id_site, access='view'):
|
||||
payload = {
|
||||
'method': 'UsersManager.getUsersWithSiteAccess',
|
||||
'idSite': id_site,
|
||||
'access': access
|
||||
}
|
||||
return self.call(payload)
|
||||
|
||||
|
||||
class PiwikCommand(object):
|
||||
|
||||
def __init__(self, json_data):
|
||||
self.hobo_json = json_data
|
||||
self.piwik_service = self.get_publik_service('piwik')
|
||||
self.piwik_url = self.piwik_service['base_url']
|
||||
self.piwik_admins_emails = self.piwik_service['admin_emails']
|
||||
self.piwik_token = self.get_piwik_user_token()
|
||||
self.piwik_tracked_urls = self.get_service_urls()
|
||||
self.api = PiwikApi(self.piwik_url, self.piwik_token)
|
||||
|
||||
def _gen_password(self, email):
|
||||
return ''.join(random.sample(email+string.letters,10))
|
||||
|
||||
def get_piwik_user_token(self):
|
||||
return json.load(file(TOKEN_OAUTH_PATH))['token_auth']
|
||||
|
||||
def get_publik_service(self, service_name):
|
||||
return [
|
||||
service for service in self.hobo_json.get('services') if service['service-id'] == service_name
|
||||
][0]
|
||||
|
||||
def get_service_urls(self):
|
||||
services = self.hobo_json.get('services')
|
||||
return [ service['base_url'] for service in services ]
|
||||
|
||||
def group_exists(self, group):
|
||||
response = self.api.get_sites_from_group(group)
|
||||
if len(response) > 0:
|
||||
return response[0]['idsite']
|
||||
return None
|
||||
|
||||
def user_exists(self, user_login):
|
||||
response = self.api.user_exists(user_login)
|
||||
return response['value']
|
||||
|
||||
def add_users(self, emails, id_site):
|
||||
users_with_access = [
|
||||
user['login'] for user in self.api.get_users_with_site_access(id_site)
|
||||
]
|
||||
for email in self.piwik_admins_emails.split(','):
|
||||
if email not in users_with_access:
|
||||
self.api.add_user(email, self._gen_password(email), email)
|
||||
self.api.set_user_access(email, id_site)
|
||||
|
||||
def deploy(self):
|
||||
hobo = self.get_publik_service('hobo')
|
||||
site_name = hobo['base_url']
|
||||
group = hobo['base_url']
|
||||
id_site = self.group_exists(group)
|
||||
if not id_site:
|
||||
response = self.api.add_site(site_name, self.piwik_tracked_urls, group)
|
||||
id_site = response.get('value')
|
||||
self.add_users(self.piwik_admins_emails, id_site)
|
||||
else:
|
||||
self.api.update_site(id_site, site_name, self.piwik_tracked_urls)
|
||||
self.add_users(self.piwik_admins_emails, id_site)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
if len(sys.argv) < 2:
|
||||
logger.error("Available command : hobo_deploy")
|
||||
sys.exit(1)
|
||||
|
||||
cmd = sys.argv[1]
|
||||
if cmd == 'hobo_deploy':
|
||||
hobo_json = file(sys.argv[3]).read() if len(sys.argv) < 5 \
|
||||
else sys.stdin.read()
|
||||
|
||||
logger.debug(hobo_json)
|
||||
|
||||
data = json.loads(hobo_json)
|
||||
cmd = PiwikCommand(data)
|
||||
cmd.deploy()
|
||||
elif cmd == 'hobo_notify':
|
||||
pass
|
||||
else:
|
||||
logger.error("Unknown command : {}".format(cmd))
|
||||
sys.exit(1)
|
||||
except(Exception) as e:
|
||||
logger.exception("Erreur in piwik-manage hobo-deploy: %s", e)
|
||||
sys.exit(1)
|
|
@ -177,15 +177,6 @@ class Mandayejs(BaseService):
|
|||
tenants_dir = settings.MANDAYEJS_TENANTS_DIRECTORY
|
||||
|
||||
|
||||
class Piwik(BaseService):
|
||||
service_id = 'piwik'
|
||||
service_manage_cmd = settings.PIWIK_MANAGE_COMMAND
|
||||
service_manage_try_cmd = settings.PIWIK_MANAGE_TRY_COMMAND
|
||||
|
||||
@classmethod
|
||||
def notify(cls, data):
|
||||
return
|
||||
|
||||
class Corbo(BaseService):
|
||||
service_id = 'corbo'
|
||||
service_manage_cmd = settings.CORBO_MANAGE_COMMAND
|
||||
|
|
|
@ -25,7 +25,6 @@ FARGO_MANAGE_COMMAND = '/usr/bin/fargo-manage'
|
|||
WELCO_MANAGE_COMMAND = '/usr/bin/welco-manage'
|
||||
MANDAYEJS_MANAGE_COMMAND = '/usr/bin/mandayejs-manage'
|
||||
CHRONO_MANAGE_COMMAND = '/usr/bin/chrono-manage'
|
||||
PIWIK_MANAGE_COMMAND = '/usr/bin/piwik-manage'
|
||||
CORBO_MANAGE_COMMAND = '/usr/bin/corbo-manage'
|
||||
HOBO_MANAGE_COMMAND = '/usr/bin/hobo-manage'
|
||||
BIJOE_MANAGE_COMMAND = '/usr/bin/bijoe-manage'
|
||||
|
@ -38,7 +37,6 @@ FARGO_MANAGE_TRY_COMMAND = FARGO_MANAGE_COMMAND
|
|||
CHRONO_MANAGE_TRY_COMMAND = CHRONO_MANAGE_COMMAND
|
||||
WELCO_MANAGE_TRY_COMMAND = WELCO_MANAGE_COMMAND
|
||||
MANDAYEJS_MANAGE_TRY_COMMAND = MANDAYEJS_MANAGE_COMMAND
|
||||
PIWIK_MANAGE_TRY_COMMAND = PIWIK_MANAGE_COMMAND
|
||||
CORBO_MANAGE_TRY_COMMAND = CORBO_MANAGE_COMMAND
|
||||
HOBO_MANAGE_TRY_COMMAND = HOBO_MANAGE_COMMAND
|
||||
BIJOE_MANAGE_TRY_COMMAND = BIJOE_MANAGE_COMMAND
|
||||
|
|
|
@ -8,7 +8,7 @@ from django.core.validators import validate_email
|
|||
|
||||
|
||||
from .models import (Authentic, Wcs, Passerelle, Variable, Combo, Fargo, Welco,
|
||||
MandayeJS, Chrono, Piwik, Corbo, BiJoe, Hobo)
|
||||
MandayeJS, Chrono, Corbo, BiJoe, Hobo)
|
||||
from .utils import get_setting_variable
|
||||
|
||||
EXCLUDED_FIELDS = ('last_operational_check_timestamp',
|
||||
|
@ -121,20 +121,6 @@ class ChronoForm(BaseForm):
|
|||
model = Chrono
|
||||
exclude = EXCLUDED_FIELDS
|
||||
|
||||
class PiwikForm(BaseForm):
|
||||
class Meta:
|
||||
model = Piwik
|
||||
exclude = EXCLUDED_FIELDS
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super(PiwikForm, self).clean()
|
||||
emails = cleaned_data.get('admin_emails',None)
|
||||
if emails:
|
||||
for email in emails.split(','):
|
||||
validate_email(email.strip())
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class CorboForm(BaseForm):
|
||||
class Meta:
|
||||
model = Corbo
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.12 on 2019-02-28 10:28
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('environment', '0018_auto_20161102_1929'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='Piwik',
|
||||
),
|
||||
]
|
|
@ -425,28 +425,6 @@ class Hobo(ServiceBase):
|
|||
return None
|
||||
|
||||
|
||||
class Piwik(ServiceBase):
|
||||
admin_emails = models.TextField(_('Admins Emails'))
|
||||
class Meta:
|
||||
verbose_name = _('Piwik')
|
||||
verbose_name_plural = _('Piwik')
|
||||
ordering = ['title']
|
||||
|
||||
class Extra:
|
||||
service_id = 'piwik'
|
||||
service_label = _('piwik')
|
||||
service_default_slug = 'piwik'
|
||||
|
||||
@classmethod
|
||||
def is_enabled(cls):
|
||||
return getattr(settings, 'PIWIK_ENABLED', False)
|
||||
|
||||
def get_admin_zones(self):
|
||||
return [
|
||||
Zone(self.title, 'piwik', self.get_base_url_path())
|
||||
]
|
||||
|
||||
|
||||
class Corbo(ServiceBase):
|
||||
class Meta:
|
||||
verbose_name = _('Announces Management')
|
||||
|
@ -498,4 +476,4 @@ class BiJoe(ServiceBase):
|
|||
|
||||
|
||||
AVAILABLE_SERVICES = [Authentic, Wcs, Passerelle, Combo, Fargo, Welco,
|
||||
MandayeJS, Chrono, Piwik, Corbo, BiJoe, Hobo]
|
||||
MandayeJS, Chrono, Corbo, BiJoe, Hobo]
|
||||
|
|
Loading…
Reference in New Issue