mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-16 02:02:58 -07:00
Log newsletter start/end date and uuid
This commit is contained in:
parent
960e147e10
commit
c9618322c2
4 changed files with 76 additions and 40 deletions
|
@ -532,7 +532,6 @@
|
|||
url: 'send_newsletter',
|
||||
data: {
|
||||
newsletter_id: $('#newsletter_id').val(),
|
||||
subject: $('#email_subject').val(),
|
||||
notify_action: 'test'
|
||||
},
|
||||
cache: false,
|
||||
|
|
|
@ -637,7 +637,7 @@ def dbcheck():
|
|||
c_db.execute(
|
||||
'CREATE TABLE IF NOT EXISTS newsletter_log (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, '
|
||||
'newsletter_id INTEGER, agent_id INTEGER, agent_name TEXT, notify_action TEXT, '
|
||||
'subject_text TEXT, success INTEGER DEFAULT 0)'
|
||||
'subject_text TEXT, start_date TEXT, end_date TEXT, uuid TEXT UNIQUE, success INTEGER DEFAULT 0)'
|
||||
)
|
||||
|
||||
# poster_urls table :: This table keeps record of the notification poster urls
|
||||
|
|
|
@ -64,46 +64,45 @@ def notify(newsletter_id=None, notify_action=None, **kwargs):
|
|||
if not newsletter_config:
|
||||
return
|
||||
|
||||
if notify_action in ('test', 'api'):
|
||||
subject_string = kwargs.pop('subject', 'Tautulli Newsletter')
|
||||
else:
|
||||
# Get the subject string
|
||||
subject_string = newsletter_config['email_config']['subject']
|
||||
|
||||
newsletter_agent = newsletters.get_agent_class(agent_id=newsletter_config['agent_id'],
|
||||
config=newsletter_config['config'],
|
||||
email_config=newsletter_config['email_config'])
|
||||
subject = newsletter_agent.format_subject(subject_string)
|
||||
|
||||
if notify_action in ('test', 'api'):
|
||||
subject_string = kwargs.pop('subject', None)
|
||||
if subject_string:
|
||||
newsletter_agent.subject = newsletter_agent.format_subject(subject_string)
|
||||
|
||||
# Set the newsletter state in the db
|
||||
newsletter_log_id = set_notify_state(newsletter=newsletter_config,
|
||||
notify_action=notify_action,
|
||||
subject=subject)
|
||||
subject=newsletter_agent.subject,
|
||||
start_date=newsletter_agent.start_date.format('YYYY-MM-DD'),
|
||||
end_date=newsletter_agent.end_date.format('YYYY-MM-DD'))
|
||||
|
||||
# Send the notification
|
||||
success = newsletters.send_newsletter(newsletter_id=newsletter_config['id'],
|
||||
subject=subject,
|
||||
notify_action=notify_action,
|
||||
newsletter_log_id=newsletter_log_id,
|
||||
**kwargs)
|
||||
success = newsletter_agent.send()
|
||||
|
||||
if success:
|
||||
set_notify_success(newsletter_log_id)
|
||||
return True
|
||||
|
||||
|
||||
def set_notify_state(newsletter, notify_action, subject):
|
||||
def set_notify_state(newsletter, notify_action, subject, start_date, end_date):
|
||||
|
||||
if newsletter and notify_action:
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
keys = {'timestamp': int(time.time()),
|
||||
'newsletter_id': newsletter['id'],
|
||||
'agent_id': newsletter['agent_id'],
|
||||
'notify_action': notify_action}
|
||||
'uuid': get_newsletter_uuid()}
|
||||
|
||||
values = {'agent_name': newsletter['agent_name'],
|
||||
'subject_text': subject}
|
||||
values = {'newsletter_id': newsletter['id'],
|
||||
'agent_id': newsletter['agent_id'],
|
||||
'agent_name': newsletter['agent_name'],
|
||||
'notify_action': notify_action,
|
||||
'subject_text': subject,
|
||||
'start_date': start_date,
|
||||
'end_date': end_date}
|
||||
|
||||
monitor_db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
|
||||
return monitor_db.last_insert_id()
|
||||
|
@ -117,3 +116,19 @@ def set_notify_success(newsletter_log_id):
|
|||
|
||||
monitor_db = database.MonitorDatabase()
|
||||
monitor_db.upsert(table_name='newsletter_log', key_dict=keys, value_dict=values)
|
||||
|
||||
|
||||
def get_newsletter_uuid():
|
||||
uuid = ''
|
||||
uuid_exists = 1
|
||||
db = database.MonitorDatabase()
|
||||
|
||||
while not uuid or uuid_exists:
|
||||
if uuid:
|
||||
result = db.select_single(
|
||||
'SELECT EXISTS(SELECT uuid FROM newsletter_log WHERE uuid = ?) as uuid_exists', [uuid])
|
||||
uuid_exists = result['uuid_exists']
|
||||
|
||||
uuid = plexpy.generate_uuid()[:8]
|
||||
|
||||
return uuid
|
||||
|
|
|
@ -19,7 +19,6 @@ from itertools import groupby
|
|||
from mako.lookup import TemplateLookup
|
||||
from mako import exceptions
|
||||
import os
|
||||
import time
|
||||
|
||||
import plexpy
|
||||
import common
|
||||
|
@ -257,7 +256,7 @@ def serve_template(templatename, **kwargs):
|
|||
|
||||
class Newsletter(object):
|
||||
NAME = ''
|
||||
_DEFAULT_CONFIG = {}
|
||||
_DEFAULT_CONFIG = {'last_days': 7}
|
||||
_DEFAULT_EMAIL_CONFIG = EMAIL().return_default_config()
|
||||
_DEFAULT_EMAIL_CONFIG['from_name'] = 'Tautulli Newsletter'
|
||||
_DEFAULT_EMAIL_CONFIG['notifier'] = 0
|
||||
|
@ -265,11 +264,44 @@ class Newsletter(object):
|
|||
_TEMPLATE_MASTER = ''
|
||||
_TEMPLATE = ''
|
||||
|
||||
def __init__(self, config=None, email_config=None):
|
||||
def __init__(self, config=None, email_config=None, start_date=None, end_date=None):
|
||||
self.config = self.set_config(config=config, default=self._DEFAULT_CONFIG)
|
||||
self.email_config = self.set_config(config=email_config, default=self._DEFAULT_EMAIL_CONFIG)
|
||||
|
||||
self.parameters = {'server_name': plexpy.CONFIG.PMS_NAME}
|
||||
date_format = helpers.momentjs_to_arrow(plexpy.CONFIG.DATE_FORMAT)
|
||||
|
||||
self.start_date = None
|
||||
self.end_date = None
|
||||
|
||||
if end_date:
|
||||
try:
|
||||
self.end_date = arrow.get(end_date, 'YYYY-MM-DD', tzinfo='local').ceil('day')
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if self.end_date is None:
|
||||
self.end_date = arrow.now().ceil('day')
|
||||
|
||||
if start_date:
|
||||
try:
|
||||
self.start_date = arrow.get(start_date, 'YYYY-MM-DD', tzinfo='local').floor('day')
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if self.start_date is None:
|
||||
self.start_date = self.end_date.shift(days=-self.config['last_days']+1).floor('day')
|
||||
|
||||
self.end_time = self.end_date.timestamp
|
||||
self.start_time = self.start_date.timestamp
|
||||
|
||||
self.parameters = {
|
||||
'start_date': self.start_date.format(date_format),
|
||||
'end_date': self.end_date.format(date_format),
|
||||
'server_name': plexpy.CONFIG.PMS_NAME
|
||||
}
|
||||
|
||||
self.subject = self.format_subject(self.email_config['subject'])
|
||||
|
||||
self.is_preview = False
|
||||
|
||||
self.data = {}
|
||||
|
@ -324,8 +356,7 @@ class Newsletter(object):
|
|||
preview=self.is_preview
|
||||
)
|
||||
|
||||
def send(self, subject='', **kwargs):
|
||||
subject = self.format_subject(subject or self.email_config['subject'])
|
||||
def send(self):
|
||||
newsletter = self.generate_newsletter()
|
||||
|
||||
if not self._has_data():
|
||||
|
@ -335,18 +366,18 @@ class Newsletter(object):
|
|||
if self.email_config['notifier']:
|
||||
return send_notification(
|
||||
notifier_id=self.email_config['notifier'],
|
||||
subject=subject,
|
||||
subject=self.subject,
|
||||
body=newsletter
|
||||
)
|
||||
|
||||
else:
|
||||
email = EMAIL(config=self.email_config)
|
||||
return email.notify(
|
||||
subject=subject,
|
||||
subject=self.subject,
|
||||
body=newsletter
|
||||
)
|
||||
|
||||
def format_subject(self, subject):
|
||||
def format_subject(self, subject=None):
|
||||
subject = subject or self._DEFAULT_EMAIL_CONFIG['subject']
|
||||
|
||||
try:
|
||||
|
@ -381,7 +412,7 @@ class RecentlyAdded(Newsletter):
|
|||
_TEMPLATE_MASTER = 'recently_added_master.html'
|
||||
_TEMPLATE = 'recently_added.html'
|
||||
|
||||
def __init__(self, config=None, email_config=None):
|
||||
def __init__(self, config=None, email_config=None, start_date=None, end_date=None):
|
||||
super(RecentlyAdded, self).__init__(config=config, email_config=email_config)
|
||||
|
||||
if self.config['incl_libraries'] is None:
|
||||
|
@ -391,15 +422,6 @@ class RecentlyAdded(Newsletter):
|
|||
|
||||
self._DEFAULT_EMAIL_CONFIG['subject'] = 'Recently Added to Plex ({server_name})! ({end_date})'
|
||||
|
||||
date_format = helpers.momentjs_to_arrow(plexpy.CONFIG.DATE_FORMAT)
|
||||
|
||||
self.end_time = int(time.time())
|
||||
self.start_time = self.end_time - self.config['last_days']*24*60*60
|
||||
self.end_date = arrow.get(self.end_time).format(date_format)
|
||||
self.start_date = arrow.get(self.start_time).format(date_format)
|
||||
|
||||
self.parameters['start_date'] = self.start_date
|
||||
self.parameters['end_date'] = self.end_date
|
||||
self.parameters['pms_identifier'] = plexpy.CONFIG.PMS_IDENTIFIER
|
||||
self.parameters['pms_web_url'] = plexpy.CONFIG.PMS_WEB_URL
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue