2016-07-30 09:42:27 +02:00
|
|
|
import requests
|
2015-03-25 10:16:18 +01:00
|
|
|
|
2016-07-13 07:36:28 +02:00
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
import django.utils.timezone
|
|
|
|
|
|
|
|
from scrutiny.projects.models import InstalledService, Module, Version, InstalledVersion
|
|
|
|
|
|
|
|
|
2013-08-07 18:19:53 +02:00
|
|
|
class Command(BaseCommand):
|
|
|
|
help = 'Scrutiny services for changes'
|
|
|
|
|
2015-04-19 10:41:31 +02:00
|
|
|
def handle(self, verbosity, *args, **options):
|
2015-11-18 15:43:31 +01:00
|
|
|
self.verbose = (int(verbosity) > 1)
|
2013-08-09 20:08:47 +02:00
|
|
|
for service in InstalledService.objects.all():
|
2014-09-23 16:17:57 +02:00
|
|
|
if not service.url.endswith('/'):
|
|
|
|
service.url = '%s/' % service.url
|
2015-04-19 10:41:31 +02:00
|
|
|
if self.verbose:
|
2016-07-30 09:43:38 +02:00
|
|
|
print('Checking %s' % service.url)
|
2013-08-07 18:19:53 +02:00
|
|
|
try:
|
2016-07-30 09:42:27 +02:00
|
|
|
response = requests.get('%s__version__' % service.url,
|
|
|
|
timeout=5, verify=False)
|
|
|
|
response.raise_for_status()
|
|
|
|
except requests.RequestException as e:
|
2016-07-30 09:43:38 +02:00
|
|
|
print('Error with %s (%r)' % (service.url, e))
|
2013-08-07 18:19:53 +02:00
|
|
|
continue
|
2015-04-19 11:50:43 +02:00
|
|
|
|
2016-07-30 09:42:27 +02:00
|
|
|
versions = response.json()
|
2015-04-19 11:50:43 +02:00
|
|
|
current_modules = set([x for x in
|
|
|
|
service.service.get_modules(platforms=[service.platform])])
|
|
|
|
seen_modules = set()
|
|
|
|
|
2013-08-07 18:19:53 +02:00
|
|
|
for module_name, version_string in versions.items():
|
|
|
|
try:
|
|
|
|
module = Module.objects.get(name=module_name)
|
|
|
|
except Module.DoesNotExist:
|
|
|
|
module = Module()
|
|
|
|
module.name = module_name
|
|
|
|
module.save()
|
|
|
|
|
2015-04-19 11:50:43 +02:00
|
|
|
seen_modules.add(module)
|
2013-08-07 18:19:53 +02:00
|
|
|
try:
|
|
|
|
version = Version.objects.get(module=module, version=version_string)
|
|
|
|
except Version.DoesNotExist:
|
2013-08-09 20:08:47 +02:00
|
|
|
version = module.version_set.create(version=version_string)
|
2013-08-07 18:19:53 +02:00
|
|
|
|
|
|
|
try:
|
|
|
|
installed_version = InstalledVersion.objects.get(
|
|
|
|
service=service, version=version)
|
|
|
|
except InstalledVersion.DoesNotExist:
|
|
|
|
installed_version = InstalledVersion()
|
|
|
|
installed_version.service = service
|
|
|
|
installed_version.version = version
|
|
|
|
installed_version.timestamp = django.utils.timezone.now()
|
|
|
|
installed_version.save()
|
2015-04-19 11:50:43 +02:00
|
|
|
|
|
|
|
uninstalled_modules = current_modules - seen_modules
|
|
|
|
for module in uninstalled_modules:
|
|
|
|
try:
|
|
|
|
version = Version.objects.get(module=module, version='')
|
|
|
|
except Version.DoesNotExist:
|
|
|
|
version = module.version_set.create(version='')
|
|
|
|
|
|
|
|
installed_version = InstalledVersion()
|
|
|
|
installed_version.service = service
|
|
|
|
installed_version.version = version
|
|
|
|
installed_version.timestamp = django.utils.timezone.now()
|
|
|
|
installed_version.save()
|