added cron job handler and admin run all function
This commit is contained in:
parent
79392fd34d
commit
2b0b094cf1
@ -267,10 +267,7 @@ def run_playlist():
|
||||
|
||||
if playlist_name:
|
||||
|
||||
data = u'{}'.format(playlist_name)
|
||||
data = data.encode('utf-8')
|
||||
|
||||
publisher.publish(run_playlist_topic_path, data=data, username=session['username'])
|
||||
execute_playlist(session['username'], playlist_name)
|
||||
|
||||
return jsonify({'message': 'execution requested', 'status': 'success'}), 200
|
||||
|
||||
@ -279,3 +276,74 @@ def run_playlist():
|
||||
|
||||
else:
|
||||
return jsonify({'error': 'not logged in'}), 401
|
||||
|
||||
|
||||
@blueprint.route('/playlist/run/user', methods=['GET'])
|
||||
def run_user():
|
||||
|
||||
if 'username' in session:
|
||||
|
||||
if database.get_user_doc_ref(session['username']).get().to_dict()['type'] == 'admin':
|
||||
user_name = request.args.get('username', session['username'])
|
||||
else:
|
||||
user_name = session['username']
|
||||
|
||||
execute_user(user_name)
|
||||
|
||||
return jsonify({'message': 'executed user', 'status': 'success'}), 200
|
||||
|
||||
else:
|
||||
return jsonify({'error': 'not logged in'}), 401
|
||||
|
||||
|
||||
@blueprint.route('/playlist/run/users', methods=['GET'])
|
||||
def run_users():
|
||||
|
||||
if 'username' in session:
|
||||
|
||||
if database.get_user_doc_ref(session['username']).get().to_dict()['type'] != 'admin':
|
||||
return jsonify({'status': 'error', 'message': 'unauthorized'}), 401
|
||||
|
||||
execute_all_users()
|
||||
|
||||
return jsonify({'message': 'executed all users', 'status': 'success'}), 200
|
||||
|
||||
else:
|
||||
return jsonify({'error': 'not logged in'}), 401
|
||||
|
||||
|
||||
@blueprint.route('/playlist/run/users/cron', methods=['GET'])
|
||||
def run_users_cron():
|
||||
|
||||
if request.headers.get('X-Appengine-Cron'):
|
||||
execute_all_users()
|
||||
return jsonify({'status': 'success'}), 200
|
||||
else:
|
||||
return jsonify({'status': 'error', 'message': 'unauthorised'}), 401
|
||||
|
||||
|
||||
def execute_all_users():
|
||||
all_users = [i.to_dict() for i in db.collection(u'spotify_users').stream()]
|
||||
|
||||
for iter_user in all_users:
|
||||
if iter_user['spotify_linked'] and not iter_user['locked']:
|
||||
execute_user(iter_user['username'])
|
||||
|
||||
|
||||
def execute_user(username):
|
||||
|
||||
playlists = [i.to_dict() for i in
|
||||
database.get_user_playlists_collection(database.get_user_query_stream(username)[0].id).stream()]
|
||||
|
||||
for iterate_playlist in playlists:
|
||||
if len(iterate_playlist['parts']) > 0:
|
||||
if iterate_playlist.get('playlist_id'):
|
||||
execute_playlist(username, iterate_playlist['name'])
|
||||
|
||||
|
||||
def execute_playlist(username, name):
|
||||
|
||||
data = u'{}'.format(name)
|
||||
data = data.encode('utf-8')
|
||||
|
||||
publisher.publish(run_playlist_topic_path, data=data, username=username)
|
||||
|
@ -3,6 +3,7 @@ import { BrowserRouter as Router, Route, Link } from "react-router-dom";
|
||||
const axios = require('axios');
|
||||
|
||||
import Lock from "./Lock.js";
|
||||
import Functions from "./Functions.js";
|
||||
|
||||
class Admin extends Component {
|
||||
render(){
|
||||
@ -10,9 +11,11 @@ class Admin extends Component {
|
||||
<div>
|
||||
<ul className="navbar" style={{width: "100%"}}>
|
||||
<li><Link to={`${this.props.match.url}/lock`}>lock accounts</Link></li>
|
||||
<li><Link to={`${this.props.match.url}/functions`}>functions</Link></li>
|
||||
</ul>
|
||||
|
||||
<Route path={`${this.props.match.url}/lock`} component={Lock} />
|
||||
<Route path={`${this.props.match.url}/functions`} component={Functions} />
|
||||
|
||||
</div>
|
||||
);
|
||||
|
40
src/js/Admin/Functions.js
Normal file
40
src/js/Admin/Functions.js
Normal file
@ -0,0 +1,40 @@
|
||||
import React, { Component } from "react";
|
||||
const axios = require('axios');
|
||||
|
||||
class Functions extends Component {
|
||||
|
||||
constructor(props){
|
||||
super(props);
|
||||
|
||||
this.runAllUsers = this.runAllUsers.bind(this);
|
||||
}
|
||||
|
||||
runAllUsers(event){
|
||||
axios.get('/api/playlist/run/users')
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
|
||||
render () {
|
||||
return (
|
||||
<table className="app-table max-width">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<h1 className="text-no-select full-width center-text ui-text">admin functions</h1>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<button className="full-width button" onClick={this.runAllUsers}>run all users</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>);
|
||||
}
|
||||
}
|
||||
|
||||
export default Functions;
|
@ -22,7 +22,6 @@ class Lock extends Component {
|
||||
accounts: response.data.accounts,
|
||||
isLoading: false
|
||||
})
|
||||
console.log(response)
|
||||
});
|
||||
}
|
||||
|
||||
@ -47,7 +46,7 @@ class Lock extends Component {
|
||||
<thead>
|
||||
<tr>
|
||||
<th colSpan='3'>
|
||||
<h1 className="text no-select">
|
||||
<h1 className="text-no-select">
|
||||
account locks
|
||||
</h1>
|
||||
</th>
|
||||
|
@ -12,6 +12,7 @@ class PlaylistsView extends Component {
|
||||
this.getPlaylists();
|
||||
this.handleRunPlaylist = this.handleRunPlaylist.bind(this);
|
||||
this.handleDeletePlaylist = this.handleDeletePlaylist.bind(this);
|
||||
this.handleRunAll = this.handleRunAll.bind(this);
|
||||
}
|
||||
|
||||
getPlaylists(){
|
||||
@ -27,7 +28,7 @@ class PlaylistsView extends Component {
|
||||
|
||||
handleRunPlaylist(name, event){
|
||||
axios.get('/api/playlist/run', {params: {name: name}})
|
||||
.catch((error) => {
|
||||
.catch((error) => {this
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
@ -41,12 +42,20 @@ class PlaylistsView extends Component {
|
||||
});
|
||||
}
|
||||
|
||||
handleRunAll(event){
|
||||
axios.get('/api/playlist/run/user')
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
const table = <div>
|
||||
<Table playlists={this.state.playlists}
|
||||
handleRunPlaylist={this.handleRunPlaylist}
|
||||
handleDeletePlaylist={this.handleDeletePlaylist}/>
|
||||
handleDeletePlaylist={this.handleDeletePlaylist}
|
||||
handleRunAll={this.handleRunAll}/>
|
||||
</div>;
|
||||
|
||||
const loadingMessage = <p className="center-text">loading...</p>;
|
||||
@ -63,6 +72,10 @@ function Table(props){
|
||||
handleRunPlaylist={props.handleRunPlaylist}
|
||||
handleDeletePlaylist={props.handleDeletePlaylist}
|
||||
key={ playlist.name }/>) }
|
||||
{ props.playlists.length > 0 &&
|
||||
<tr>
|
||||
<td colSpan="3"><button className="full-width button" onClick={props.handleRunAll}>run all</button></td>
|
||||
</tr> }
|
||||
</tbody>
|
||||
</table>
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user