import axios from "axios" ; import queryString from "query-string" ; const BASE_URL = process . env . NODE_ENV === "production" ? `${ window . ROOT_PATH }/api` : `http://localhost:8080${ window . ROOT_PATH }/api` ; export interface ListQueuesResponse { queues : Queue [ ] ; } export interface ListTasksResponse { tasks : TaskInfo [ ] ; stats : Queue ; } export interface ListServersResponse { servers : ServerInfo [ ] ; } export interface ListSchedulerEntriesResponse { entries : SchedulerEntry [ ] ; } export interface ListSchedulerEnqueueEventsResponse { events : SchedulerEnqueueEvent [ ] ; } export interface BatchCancelTasksResponse { canceled_ids : string [ ] ; error_ids : string [ ] ; } export interface BatchDeleteTasksResponse { deleted_ids : string [ ] ; failed_ids : string [ ] ; } export interface BatchRunTasksResponse { pending_ids : string [ ] ; error_ids : string [ ] ; } export interface BatchArchiveTasksResponse { archived_ids : string [ ] ; error_ids : string [ ] ; } export interface DeleteAllTasksResponse { deleted : number ; } export interface ListQueueStatsResponse { stats : { [ qname ] : DailyStat [ ] ; } ; } export interface RedisInfoResponse { address : string ; info : RedisInfo ; raw_info : string ; cluster : boolean ; raw_cluster_nodes : string ; queue_locations : QueueLocation [ ] | null ; } export interface QueueLocation { queue : string ; keyslot : number ; nodes : string [ ] ; } export interface MetricsResponse { queue_size : PrometheusMetricsResponse ; queue_latency_seconds : PrometheusMetricsResponse ; queue_memory_usage_approx_bytes : PrometheusMetricsResponse ; tasks_processed_per_second : PrometheusMetricsResponse ; tasks_failed_per_second : PrometheusMetricsResponse ; error_rate : PrometheusMetricsResponse ; pending_tasks_by_queue : PrometheusMetricsResponse ; retry_tasks_by_queue : PrometheusMetricsResponse ; archived_tasks_by_queue : PrometheusMetricsResponse ; } export interface PrometheusMetricsResponse { status : "success" | "error" ; data ? : MetricsResult ; error ? : string ; errorType ? : string ; } export interface MetricsResult { resultType : string ; result : Metrics [ ] ; } export interface Metrics { metric : MetricsInfo ; values : [ number , string ] [ ] ; } export interface MetricsInfo { __name__ : string ; instance : string ; job : string ; queue ? : string ; state ? : string ; } export interface RedisInfo { active_defrag_hits : string ; active_defrag_key_hits : string ; active_defrag_key_misses : string ; active_defrag_misses : string ; active_defrag_running : string ; allocator_active : string ; allocator_allocated : string ; allocator_frag_bytes : string ; allocator_frag_ratio : string ; allocator_resident : string ; allocator_rss_bytes : string ; allocator_rss_ratio : string ; aof_current_rewrite_time_sec : string ; aof_enabled : string ; aof_last_bgrewrite_status : string ; aof_last_cow_size : string ; aof_last_rewrite_time_sec : string ; aof_last_write_status : string ; aof_rewrite_in_progress : string ; aof_rewrite_scheduled : string ; arch_bits : string ; atomicvar_api : string ; blocked_clients : string ; client_recent_max_input_buffer : string ; client_recent_max_output_buffer : string ; clients_in_timeout_table : string ; cluster_enabled : string ; config_file : string ; configured_hz : string ; connected_clients : string ; connected_slaves : string ; evicted_keys : string ; executable : string ; expire_cycle_cpu_milliseconds : string ; expired_keys : string ; expired_stale_perc : string ; expired_time_cap_reached_count : string ; gcc_version : string ; hz : string ; instantaneous_input_kbps : string ; instantaneous_ops_per_sec : string ; instantaneous_output_kbps : string ; keyspace_hits : string ; keyspace_misses : string ; latest_fork_usec : string ; lazyfree_pending_objects : string ; loading : string ; lru_clock : string ; master_repl_offset : string ; master_replid : string ; master_replid2 : string ; maxmemory : string ; maxmemory_human : string ; maxmemory_policy : string ; mem_allocator : string ; mem_aof_buffer : string ; mem_clients_normal : string ; mem_clients_slaves : string ; mem_fragmentation_bytes : string ; mem_fragmentation_ratio : string ; mem_not_counted_for_evict : string ; mem_replication_backlog : string ; migrate_cached_sockets : string ; module_fork_in_progress : string ; module_fork_last_cow_size : string ; multiplexing_api : string ; number_of_cached_scripts : string ; os : string ; process_id : string ; pubsub_channels : string ; pubsub_patterns : string ; rdb_bgsave_in_progress : string ; rdb_changes_since_last_save : string ; rdb_current_bgsave_time_sec : string ; rdb_last_bgsave_status : string ; rdb_last_bgsave_time_sec : string ; rdb_last_cow_size : string ; rdb_last_save_time : string ; redis_build_id : string ; redis_git_dirty : string ; redis_git_sha1 : string ; redis_mode : string ; redis_version : string ; rejected_connections : string ; repl_backlog_active : string ; repl_backlog_first_byte_offset : string ; repl_backlog_histlen : string ; repl_backlog_size : string ; role : string ; rss_overhead_bytes : string ; rss_overhead_ratio : string ; run_id : string ; second_repl_offset : string ; slave_expires_tracked_keys : string ; sync_full : string ; sync_partial_err : string ; sync_partial_ok : string ; tcp_port : string ; total_commands_processed : string ; total_connections_received : string ; total_net_input_bytes : string ; total_net_output_bytes : string ; total_system_memory : string ; total_system_memory_human : string ; tracking_clients : string ; tracking_total_items : string ; tracking_total_keys : string ; tracking_total_prefixes : string ; unexpected_error_replies : string ; uptime_in_days : string ; uptime_in_seconds : string ; used_cpu_sys : string ; used_cpu_sys_children : string ; used_cpu_user : string ; used_cpu_user_children : string ; used_memory : string ; used_memory_dataset : string ; used_memory_dataset_perc : string ; used_memory_human : string ; used_memory_lua : string ; used_memory_lua_human : string ; used_memory_overhead : string ; used_memory_peak : string ; used_memory_peak_human : string ; used_memory_peak_perc : string ; used_memory_rss : string ; used_memory_rss_human : string ; used_memory_scripts : string ; used_memory_scripts_human : string ; used_memory_startup : string ; } export interface Queue { queue : string ; paused : boolean ; size : number ; memory_usage_bytes : number ; active : number ; pending : number ; scheduled : number ; retry : number ; archived : number ; completed : number ; processed : number ; failed : number ; timestamp : string ; } export interface DailyStat { queue : string ; date : string ; processed : number ; failed : number ; } export interface TaskInfo { id : string ; queue : string ; type : string ; payload : string ; state : string ; start_time : string ; max_retry : number ; retried : number ; last_failed_at : string ; error_message : string ; next_process_at : string ; timeout_seconds : number ; deadline : string ; completed_at : string ; result : string ; ttl_seconds : number ; } export interface ServerInfo { id : string ; host : string ; pid : number ; concurrency : number ; queue_priorities : { [ qname ] : number ; } ; strict_priority_enabled : boolean ; start_time : string ; status : string ; active_workers : WorkerInfo [ ] ; } export interface WorkerInfo { task_id : string ; queue : string ; task_type : string ; task_payload : string ; start_time : string ; } export interface SchedulerEntry { id : string ; spec : string ; task_type : string ; task_payload : string ; options : string [ ] ; next_enqueue_at : string ; prev_enqueue_at ? : string ; } export interface SchedulerEnqueueEvent { task_id : string ; enqueued_at : string ; } export interface PaginationOptions extends Record < string , number | undefined > { size ? : number ; page ? : number ; } export async function listQueues ( ) { const resp = await axios ( { method : "get" , url : `${ BASE_URL }/queues` , } ) ; return resp . data ; } export async function deleteQueue ( qname ) { await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }` , } ) ; } export async function pauseQueue ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }:pause` , } ) ; } export async function resumeQueue ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }:resume` , } ) ; } export async function listQueueStats ( ) { const resp = await axios ( { method : "get" , url : `${ BASE_URL }/queue_stats` , } ) ; return resp . data ; } export async function getTaskInfo ( qname , id ) { const url = `${ BASE_URL }/queues/${ qname }/tasks/${ id }` ; const resp = await axios ( { method : "get" , url , } ) ; return resp . data ; } export async function listActiveTasks ( qname , pageOpts ? ) { let url = `${ BASE_URL }/queues/${ qname }/active_tasks` ; if ( pageOpts ) { url += `?${ queryString . stringify ( pageOpts ) }` ; } const resp = await axios ( { method : "get" , url , } ) ; return resp . data ; } export async function cancelActiveTask ( qname , taskId ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/active_tasks/${ taskId }:cancel` , } ) ; } export async function cancelAllActiveTasks ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/active_tasks:cancel_all` , } ) ; } export async function batchCancelActiveTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/active_tasks:batch_cancel` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function listPendingTasks ( qname , pageOpts ? ) { let url = `${ BASE_URL }/queues/${ qname }/pending_tasks` ; if ( pageOpts ) { url += `?${ queryString . stringify ( pageOpts ) }` ; } const resp = await axios ( { method : "get" , url , } ) ; return resp . data ; } export async function listScheduledTasks ( qname , pageOpts ? ) { let url = `${ BASE_URL }/queues/${ qname }/scheduled_tasks` ; if ( pageOpts ) { url += `?${ queryString . stringify ( pageOpts ) }` ; } const resp = await axios ( { method : "get" , url , } ) ; return resp . data ; } export async function listRetryTasks ( qname , pageOpts ? ) { let url = `${ BASE_URL }/queues/${ qname }/retry_tasks` ; if ( pageOpts ) { url += `?${ queryString . stringify ( pageOpts ) }` ; } const resp = await axios ( { method : "get" , url , } ) ; return resp . data ; } export async function listArchivedTasks ( qname , pageOpts ? ) { let url = `${ BASE_URL }/queues/${ qname }/archived_tasks` ; if ( pageOpts ) { url += `?${ queryString . stringify ( pageOpts ) }` ; } const resp = await axios ( { method : "get" , url , } ) ; return resp . data ; } export async function listCompletedTasks ( qname , pageOpts ? ) { let url = `${ BASE_URL }/queues/${ qname }/completed_tasks` ; if ( pageOpts ) { url += `?${ queryString . stringify ( pageOpts ) }` ; } const resp = await axios ( { method : "get" , url , } ) ; return resp . data ; } export async function archivePendingTask ( qname , taskId ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/pending_tasks/${ taskId }:archive` , } ) ; } export async function batchArchivePendingTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/pending_tasks:batch_archive` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function archiveAllPendingTasks ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/pending_tasks:archive_all` , } ) ; } export async function deletePendingTask ( qname , taskId ) { await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/pending_tasks/${ taskId }` , } ) ; } export async function batchDeletePendingTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/pending_tasks:batch_delete` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function deleteAllPendingTasks ( qname ) { const resp = await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/pending_tasks:delete_all` , } ) ; return resp . data ; } export async function runScheduledTask ( qname , taskId ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks/${ taskId }:run` , } ) ; } export async function archiveScheduledTask ( qname , taskId ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks/${ taskId }:archive` , } ) ; } export async function deleteScheduledTask ( qname , taskId ) { await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks/${ taskId }` , } ) ; } export async function batchDeleteScheduledTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks:batch_delete` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function deleteAllScheduledTasks ( qname ) { const resp = await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks:delete_all` , } ) ; return resp . data ; } export async function batchRunScheduledTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks:batch_run` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function runAllScheduledTasks ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks:run_all` , } ) ; } export async function batchArchiveScheduledTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks:batch_archive` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function archiveAllScheduledTasks ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/scheduled_tasks:archive_all` , } ) ; } export async function runRetryTask ( qname , taskId ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks/${ taskId }:run` , } ) ; } export async function archiveRetryTask ( qname , taskId ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks/${ taskId }:archive` , } ) ; } export async function deleteRetryTask ( qname , taskId ) { await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks/${ taskId }` , } ) ; } export async function batchDeleteRetryTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks:batch_delete` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function deleteAllRetryTasks ( qname ) { const resp = await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks:delete_all` , } ) ; return resp . data ; } export async function batchRunRetryTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks:batch_run` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function runAllRetryTasks ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks:run_all` , } ) ; } export async function batchArchiveRetryTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks:batch_archive` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function archiveAllRetryTasks ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/retry_tasks:archive_all` , } ) ; } export async function runArchivedTask ( qname , taskId ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/archived_tasks/${ taskId }:run` , } ) ; } export async function deleteArchivedTask ( qname , taskId ) { await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/archived_tasks/${ taskId }` , } ) ; } export async function batchDeleteArchivedTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/archived_tasks:batch_delete` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function deleteAllArchivedTasks ( qname ) { const resp = await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/archived_tasks:delete_all` , } ) ; return resp . data ; } export async function batchRunArchivedTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/archived_tasks:batch_run` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function runAllArchivedTasks ( qname ) { await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/archived_tasks:run_all` , } ) ; } export async function deleteCompletedTask ( qname , taskId ) { await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/completed_tasks/${ taskId }` , } ) ; } export async function batchDeleteCompletedTasks ( qname , taskIds ) { const resp = await axios ( { method : "post" , url : `${ BASE_URL }/queues/${ qname }/completed_tasks:batch_delete` , data : { task_ids : taskIds , } , } ) ; return resp . data ; } export async function deleteAllCompletedTasks ( qname ) { const resp = await axios ( { method : "delete" , url : `${ BASE_URL }/queues/${ qname }/completed_tasks:delete_all` , } ) ; return resp . data ; } export async function listServers ( ) { const resp = await axios ( { method : "get" , url : `${ BASE_URL }/servers` , } ) ; return resp . data ; } export async function listSchedulerEntries ( ) { const resp = await axios ( { method : "get" , url : `${ BASE_URL }/scheduler_entries` , } ) ; return resp . data ; } export async function listSchedulerEnqueueEvents ( entryId ) { const resp = await axios ( { method : "get" , url : `${ BASE_URL }/scheduler_entries/${ entryId }/enqueue_events` , } ) ; return resp . data ; } export async function getRedisInfo ( ) { const resp = await axios ( { method : "get" , url : `${ BASE_URL }/redis_info` , } ) ; return resp . data ; } interface MetricsEndpointParams { endtime : number ; duration : number ; queues ? : string ; } export async function getMetrics ( endTime , duration , queues ) { let params = { endtime : endTime , duration : duration , } ; if ( queues && queues . length > 0 ) { params . queues = queues . join ( "," ) ; } const resp = await axios ( { method : "get" , url : `${ BASE_URL }/metrics?${ queryString . stringify ( params ) }` , } ) ; return resp . data ; }