shifted cron jobs to serverless+scheduler, switches instead of checboxes

This commit is contained in:
aj 2020-08-13 19:50:21 +01:00
parent d5f9681fd8
commit ea21ecccd3
7 changed files with 64 additions and 37 deletions

View File

@ -5,7 +5,7 @@ from pathlib import Path
import sys import sys
from cmd import Cmd from cmd import Cmd
stage_dir = '_playlist-manager' stage_dir = '.music-tools'
scss_rel_path = Path('src', 'scss', 'style.scss') scss_rel_path = Path('src', 'scss', 'style.scss')
css_rel_path = Path('build', 'style.css') css_rel_path = Path('build', 'style.css')
@ -98,6 +98,42 @@ class Admin(Cmd):
print('>> deploying') print('>> deploying')
self.deploy_function('run_user_playlist') self.deploy_function('run_user_playlist')
# all playlists cron job
def do_playlist_cron(self, args):
self.prepare_stage()
self.prepare_main('cron')
print('>> deploying')
self.deploy_function('run_all_playlists')
# all stats refresh cron job
def do_playlist_stats(self, args):
self.prepare_stage()
self.prepare_main('cron')
print('>> deploying')
self.deploy_function('run_all_playlist_stats')
# all tags cron job
def do_tags_cron(self, args):
self.prepare_stage()
self.prepare_main('cron')
print('>> deploying')
self.deploy_function('run_all_tags')
# redeploy all cron job functions
def do_all_cron(self, args):
self.prepare_stage()
self.prepare_main('cron')
print('>> deploying playlists')
self.deploy_function('run_all_playlists')
print('>> deploying stats')
self.deploy_function('run_all_playlist_stats')
print('>> deploying tags')
self.deploy_function('run_all_tags')
def do_exit(self, args): def do_exit(self, args):
exit(0) exit(0)

13
main.cron.py Normal file
View File

@ -0,0 +1,13 @@
from music.cloud.tasks import update_all_user_playlists, refresh_all_user_playlist_stats, update_all_user_tags
def run_all_playlists(event, context):
update_all_user_playlists()
def run_all_playlist_stats(event, context):
refresh_all_user_playlist_stats()
def run_all_tags(event, context):
update_all_user_tags()

View File

@ -8,7 +8,7 @@ import logging
from datetime import datetime from datetime import datetime
from music.api.decorators import login_required, login_or_basic_auth, \ from music.api.decorators import login_required, login_or_basic_auth, \
admin_required, gae_cron, cloud_task, validate_json, validate_args admin_required, cloud_task, validate_json, validate_args, spotify_link_required
from music.cloud import queue_run_user_playlist, offload_or_run_user_playlist from music.cloud import queue_run_user_playlist, offload_or_run_user_playlist
from music.cloud.tasks import update_all_user_playlists, update_playlists from music.cloud.tasks import update_all_user_playlists, update_playlists
@ -289,16 +289,9 @@ def run_users(user=None):
return jsonify({'message': 'executed all users', 'status': 'success'}), 200 return jsonify({'message': 'executed all users', 'status': 'success'}), 200
@blueprint.route('/playlist/run/users/cron', methods=['GET'])
@gae_cron
def run_users_cron():
update_all_user_playlists()
return jsonify({'status': 'success'}), 200
@blueprint.route('/playlist/image', methods=['GET']) @blueprint.route('/playlist/image', methods=['GET'])
@login_or_basic_auth @login_or_basic_auth
@spotify_link_required
@validate_args(('name', str)) @validate_args(('name', str))
def image(user=None): def image(user=None):

View File

@ -4,7 +4,7 @@ import json
import os import os
from music.api.decorators import admin_required, login_or_basic_auth, lastfm_username_required, \ from music.api.decorators import admin_required, login_or_basic_auth, lastfm_username_required, \
spotify_link_required, cloud_task, gae_cron, validate_args spotify_link_required, cloud_task, validate_args
import music.db.database as database import music.db.database as database
from music.cloud.tasks import refresh_all_user_playlist_stats, refresh_user_playlist_stats, refresh_playlist_task from music.cloud.tasks import refresh_all_user_playlist_stats, refresh_user_playlist_stats, refresh_playlist_task
from music.tasks.refresh_lastfm_stats import refresh_lastfm_track_stats, \ from music.tasks.refresh_lastfm_stats import refresh_lastfm_track_stats, \
@ -140,13 +140,6 @@ def run_users(user=None):
return jsonify({'message': 'executed all users', 'status': 'success'}), 200 return jsonify({'message': 'executed all users', 'status': 'success'}), 200
@blueprint.route('/playlist/refresh/users/cron', methods=['GET'])
@gae_cron
def run_users_task():
refresh_all_user_playlist_stats()
return jsonify({'status': 'success'}), 200
@blueprint.route('/playlist/refresh/user', methods=['GET']) @blueprint.route('/playlist/refresh/user', methods=['GET'])
@login_or_basic_auth @login_or_basic_auth
def run_user(user=None): def run_user(user=None):

View File

@ -4,9 +4,8 @@ import logging
import os import os
import json import json
from music.api.decorators import login_or_basic_auth, gae_cron, cloud_task from music.api.decorators import login_or_basic_auth, cloud_task
from music.cloud.function import update_tag as serverless_update_tag from music.cloud.function import update_tag as serverless_update_tag
from music.cloud.tasks import update_all_user_tags
from music.tasks.update_tag import update_tag from music.tasks.update_tag import update_tag
from music.model.tag import Tag from music.model.tag import Tag
@ -152,11 +151,3 @@ def run_tag_task():
serverless_update_tag(username=payload['username'], tag_id=payload['tag_id']) serverless_update_tag(username=payload['username'], tag_id=payload['tag_id'])
return jsonify({'message': 'executed playlist', 'status': 'success'}), 200 return jsonify({'message': 'executed playlist', 'status': 'success'}), 200
@blueprint.route('/tag/update/users/cron', methods=['GET'])
@gae_cron
def run_tags_cron():
update_all_user_tags()
return jsonify({'status': 'success'}), 200

View File

@ -1,8 +1,8 @@
import React, { Component } from "react"; import React, { Component } from "react";
const axios = require('axios'); const axios = require('axios');
import { Card, Button, CircularProgress, FormControl, TextField, InputLabel, Select, Checkbox, FormControlLabel, import { Card, Button, CircularProgress, FormControl, TextField, InputLabel, Select, FormControlLabel,
CardActions, CardContent, Typography, Grid, MenuItem } from '@material-ui/core'; CardActions, CardContent, Typography, Grid, MenuItem, Switch } from '@material-ui/core';
import { Delete } from '@material-ui/icons'; import { Delete } from '@material-ui/icons';
import { makeStyles } from '@material-ui/core/styles'; import { makeStyles } from '@material-ui/core/styles';
@ -356,19 +356,19 @@ export class Edit extends Component{
<Grid item xs={12}> <Grid item xs={12}>
<FormControlLabel <FormControlLabel
control={ control={
<Checkbox color="primary" name="shuffle" checked={this.state.shuffle} onChange={this.handleCheckChange} /> <Switch color="primary" name="shuffle" checked={this.state.shuffle} onChange={this.handleCheckChange} />
} }
labelPlacement="bottom" labelPlacement="bottom"
label="Shuffle"/> label="Shuffle"/>
<FormControlLabel <FormControlLabel
control={ control={
<Checkbox color="primary" checked={this.state.include_recommendations} name="include_recommendations" onChange={this.handleCheckChange} /> <Switch color="primary" checked={this.state.include_recommendations} name="include_recommendations" onChange={this.handleCheckChange} />
} }
labelPlacement="bottom" labelPlacement="bottom"
label="Recommendations"/> label="Recommendations"/>
<FormControlLabel <FormControlLabel
control={ control={
<Checkbox color="primary" checked={this.state.include_library_tracks} name="include_library_tracks" onChange={this.handleCheckChange} /> <Switch color="primary" checked={this.state.include_library_tracks} name="include_library_tracks" onChange={this.handleCheckChange} />
} }
labelPlacement="bottom" labelPlacement="bottom"
label="Library Tracks"/> label="Library Tracks"/>
@ -428,14 +428,14 @@ export class Edit extends Component{
<Grid item xs={12}> <Grid item xs={12}>
<FormControlLabel <FormControlLabel
control={ control={
<Checkbox color="primary" checked={this.state.add_this_month} name="add_this_month" onChange={this.handleCheckChange} /> <Switch color="primary" checked={this.state.add_this_month} name="add_this_month" onChange={this.handleCheckChange} />
} }
label="This Month" label="This Month"
labelPlacement="bottom" labelPlacement="bottom"
/> />
<FormControlLabel <FormControlLabel
control={ control={
<Checkbox color="primary" checked={this.state.add_last_month} name="add_last_month" onChange={this.handleCheckChange} /> <Switch color="primary" checked={this.state.add_last_month} name="add_last_month" onChange={this.handleCheckChange} />
} }
label="Last Month" label="Last Month"
labelPlacement="bottom" labelPlacement="bottom"
@ -474,6 +474,7 @@ export class Edit extends Component{
function ReferenceEntry(props) { function ReferenceEntry(props) {
return <option value={props.name}>{props.name}</option>; return <option value={props.name}>{props.name}</option>;
// return <MenuItem value={props.name}>{props.name}</MenuItem>;
} }
function ListBlock(props) { function ListBlock(props) {

View File

@ -1,7 +1,7 @@
import React, { Component } from "react"; import React, { Component } from "react";
const axios = require('axios'); const axios = require('axios');
import { Card, Button, CircularProgress, CardActions, CardContent, FormControl, InputLabel, Select, Typography, Grid, TextField, MenuItem, FormControlLabel, Checkbox } from '@material-ui/core'; import { Card, Button, CircularProgress, CardActions, CardContent, FormControl, InputLabel, Select, Typography, Grid, TextField, MenuItem, FormControlLabel, Switch } from '@material-ui/core';
import { Delete } from '@material-ui/icons'; import { Delete } from '@material-ui/icons';
import { makeStyles } from '@material-ui/core/styles'; import { makeStyles } from '@material-ui/core/styles';
@ -325,7 +325,7 @@ class View extends Component{
<Grid item xs={12}> <Grid item xs={12}>
<FormControlLabel <FormControlLabel
control={ control={
<Checkbox color="primary" checked={this.state.tag.time_objects} name="time_objects" onChange={this.handleCheckChange} /> <Switch color="primary" checked={this.state.tag.time_objects} name="time_objects" onChange={this.handleCheckChange} />
} }
label="Time Tag" label="Time Tag"
labelPlacement="bottom" labelPlacement="bottom"