You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
2.7 KiB

from couchpotato.api import addApiView
from couchpotato.core.helpers.request import jsonified, getParam, getParams
14 years ago
from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin
from couchpotato.environment import Env
14 years ago
import os
14 years ago
import traceback
log = CPLog(__name__)
class Logging(Plugin):
def __init__(self):
13 years ago
addApiView('logging.get', self.get, docs = {
'desc': 'Get the full log file by number',
'params': {
'nr': {'desc': 'Number of the log to get.'}
},
'return': {'type': 'object', 'example': """{
'success': True,
'log': string, //Log file
'total': int, //Total log files available
}"""}
})
addApiView('logging.clear', self.clear, docs = {
'desc': 'Remove all the log files'
})
addApiView('logging.log', self.log, docs = {
'desc': 'Log errors',
13 years ago
'params': {
'type': {'desc': 'Type of logging, default "error"'},
'**kwargs': {'type':'object', 'desc': 'All other params will be printed in the log string.'},
}
})
def get(self):
nr = int(getParam('nr', 0))
current_path = None
14 years ago
total = 1
for x in range(0, 50):
path = '%s%s' % (Env.get('log_path'), '.%s' % x if x > 0 else '')
14 years ago
# Check see if the log exists
if not os.path.isfile(path):
total = x - 1
14 years ago
break
# Set current path
if x is nr:
current_path = path
log = ''
if current_path:
f = open(current_path, 'r')
14 years ago
log = f.read()
return jsonified({
'success': True,
'log': log,
14 years ago
'total': total,
})
14 years ago
def clear(self):
for x in range(0, 50):
path = '%s%s' % (Env.get('log_path'), '.%s' % x if x > 0 else '')
if not os.path.isfile(path):
break
14 years ago
try:
# Create empty file for current logging
if x is 0:
self.createFile(path, '')
else:
os.remove(path)
14 years ago
except:
log.error('Couldn\'t delete file "%s": %s', (path, traceback.format_exc()))
return jsonified({
'success': True
})
def log(self):
params = getParams()
try:
log_message = 'API log: %s' % params
try:
getattr(log, params.get('type', 'error'))(log_message)
except:
log.error(log_message)
except:
log.error('Couldn\'t log via API: %s' % params)
return jsonified({
'success': True
})