Commit bb0f2530 authored by Dmitry Shelepnev's avatar Dmitry Shelepnev
Browse files

Add new sopds_util functions (getconf and setconf)

parent e897109e
Loading
Loading
Loading
Loading
+23 −15
Original line number Diff line number Diff line
@@ -25,12 +25,6 @@

	LANGUAGE_CODE = 'ru-RU'
    
	SOPDS_ROOT_LIB = < Путь к каталогу с книгами >
	SOPDS_AUTH = < False | True >
	SOPDS_SCAN_SHED_MIN  = '0'
	SOPDS_SCAN_SHED_HOUR = '0,12'
	SOPDS_INPX_ENABLE = < False | True >
    
1.4 Производим инициализацию базы данных и заполнение начальными данными (жанры)

	python3 manage.py migrate
@@ -40,19 +34,23 @@

	python3 manage.py createsuperuser
	
1.6 Вручную запускаем разовое сканирование коллекции книг  
1.6 Настраиваем путь к Вашему каталогу с книгами (Однако Вы можете сначала запустить sopds_server согласно п.1.8. и настроить указанный параметр через веб-интерфейс)

	python3 manage.py sopds_util setconf SOPDS_ROOT_LIB 'Путь к каталогу с книгами'
		
1.7 Вручную запускаем разовое сканирование коллекции книг  
(Выполняется относительно долго: например, моя коллекция книг в архивах объемом 180Гб сканировалась в БД MYSQL - 1час)

	python3 manage.py sopds_scanner scan --daemon

1.7 Запускаем встроенный HTTP/OPDS сервер
1.8 Запускаем встроенный HTTP/OPDS сервер

	python3 manage.py sopds_server start --daemon
	
Однако наилучшим способом, все же является настройка в качестве HTTP/OPDS серверов Apache или Nginx 
(точка входа ./sopds/wsgi.py)
	
1.8 Запускаем SCANNER сервер (опционально, необходим для автоматизированного периодического пересканирования коллекции)  
1.9 Запускаем SCANNER сервер (опционально, необходим для автоматизированного периодического пересканирования коллекции)  
Перед запуском SCANNER сервера необходимо убедится, что сканирование, запущеное в п.1.6 уже завершено,
т.к. может возникнуть ситуация с запуском параллельного процесса сканирования, что может привести к ошибкам.
Примите во внимание, что в  настройках, указанных в п.1.3 задан периодический запуск сканирования 2 раза 
@@ -258,11 +256,17 @@ MySQL по сравнению с sqlite работает гораздо быст

    python3 manage.py sopds_util load_mygenres   
    
Если вы используете MySQL и при очистке БД у вас возникла ошибка (2006, 'MySQL server has gone away'),
то добавьте в файл настройки /etc/my.cnf следующие настройки, после чего перезапустите сервер БД:  
Посмотреть все параметры конфигурации:

    python3 manage.py sopds_util getconf  
    
Посмотреть значение конкретного параметр конфигурации:

    wait_timeout = 600
    max_allowed_packet = 64M
    python3 manage.py sopds_util getconf SOPDS_ROOT_LIB
    
Задать значение конкретного параметр конфигурации:

    python3 manage.py sopds_util setconf SOPDS_ROOT_LIB '\home\files\books'
                 
Запустить однократное сканирование коллекции книг:

@@ -351,9 +355,13 @@ MySQL по сравнению с sqlite работает гораздо быст
(по умолчанию SOPDS_SCANNER_PID = os.path.join(settings.BASE_DIR,'opds_catalog/tmp/sopds_scanner.pid'))  

Параметры **SOPDS_SCAN_SHED_XXX** устанавливают значения шедулера, для периодического сканирования коллекции книг при помощи **manage.py sopds_scanner start**.  Возможные значения можно найти на следующей странице: # https://apscheduler.readthedocs.io/en/latest/modules/triggers/cron.html#module-apscheduler.triggers.cron  
Изменения указанных ниже параметров через Web-интерфейс или командную строку проверяется процессом sopds_scanner каждые 10 минут. 
В случае обнаружения изменений sopds_scanner автоматически вносит соответсвующие изменения в планировщик.

(по умолчанию SOPDS_SCAN_SHED_MIN = '0')  
(по умолчанию SOPDS_SCAN_SHED_HOUR = '0')  
(по умолчанию SOPDS_SCAN_SHED_HOUR = '0,12')  
(по умолчанию SOPDS_SCAN_SHED_DAY = '*')  
(по умолчанию SOPDS_SCAN_SHED_DOW = '*')  


+25 −2
Original line number Diff line number Diff line
from django.core.management.base import BaseCommand
from django.core.management import call_command
from django.db import transaction
from django.conf import settings as main_settings

from opds_catalog import opdsdb
from opds_catalog import models
from opds_catalog.models import Counter

from constance import config

class Command(BaseCommand):
    help = 'Utils for SOPDS.'
    verbose = False
        
    def add_arguments(self, parser):
        parser.add_argument('command', help='Use [ clear | info | save_mygenres | load_mygenres ]')
        parser.add_argument('command', action="store", nargs='*', help='Use [ clear | info | save_mygenres | load_mygenres | setconf | getconf ]') 
        parser.add_argument('--verbose',action='store_true', dest='verbose', default=False, help='Set verbosity level for books collection scan.')  
        parser.add_argument('--nogenres',action='store_true', dest='nogenres', default=False, help='Not install genres fom fixtures.')              

    def handle(self, *args, **options):
        action = options['command'] 
        action = options['command'][0] 
        
        self.verbose = options['verbose']
        self.nogenres = options['nogenres']
@@ -30,6 +33,13 @@ class Command(BaseCommand):
            self.save_mygenres()
        elif action == "load_mygenres":
            self.load_mygenres()
        elif action == "setconf":
            self.confparam = options['command'][1] if len(options['command'])>1 else None
            self.confvalue = options['command'][2] if len(options['command'])>2 else None
            self.setconf(self.confparam, self.confvalue)         
        elif action == "getconf":
            self.confparam = options['command'][1] if len(options['command'])>1 else None
            self.getconf(self.confparam)   

    def clear(self):
        with transaction.atomic():
@@ -56,4 +66,17 @@ class Command(BaseCommand):
        Counter.objects.update_known_counters()
        self.stdout.write('Genres load from opds_catalog/fixtures/mygenres.json')
        
    def setconf(self, confparam, confvalue):  
        if confparam and confvalue:
            call_command('constance', 'set',confparam, confvalue, app_label='opds_catalog')
            self.stdout.write('Config parameter %s set to %s'%(confparam, confvalue))
            
            
    def getconf(self, confparam):  
        if confparam:
            call_command('constance', 'get', confparam, app_label='opds_catalog')
        else:
            call_command('constance', 'list', app_label='opds_catalog')