misc: remove obsolete/never used piwik support (#30973)

This commit is contained in:
Frédéric Péters 2019-02-28 11:26:34 +01:00
parent 5bf6f72d9f
commit 811c05bfd1
12 changed files with 20 additions and 378 deletions

View File

@ -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'

View File

@ -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 -

7
debian/control vendored
View File

@ -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

View File

@ -1 +0,0 @@
/var/log/hobo-piwik

View File

@ -1 +0,0 @@
debian/piwik/piwik-manage /usr/bin/

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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',
),
]

View File

@ -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]