{"version":3,"sources":["paths.ts","actions/settingsActions.ts","components/TablePaginationActions.tsx","api.ts","utils.ts","actions/queuesActions.ts","actions/queueStatsActions.ts","components/QueueSizeChart.tsx","components/ProcessedTasksChart.tsx","components/DeleteQueueConfirmationDialog.tsx","types/table.ts","components/QueuesOverviewTable.tsx","components/Tooltip.tsx","components/SplitButton.tsx","hooks/index.tsx","components/DailyStatsChart.tsx","views/DashboardView.tsx","reducers/settingsReducer.ts","theme.tsx","actions/snackbarActions.ts","components/ListItemLink.tsx","components/SyntaxHighlighter.tsx","actions/schedulerEntriesActions.ts","reducers/schedulerEntriesReducer.ts","components/SchedulerEnqueueEventsTable.tsx","components/SchedulerEntriesTable.tsx","views/SchedulersView.tsx","actions/tasksActions.ts","components/TableActions.tsx","components/TasksTable.tsx","components/ActiveTasksTable.tsx","components/PendingTasksTable.tsx","components/ScheduledTasksTable.tsx","components/RetryTasksTable.tsx","components/ArchivedTasksTable.tsx","components/CompletedTasksTable.tsx","actions/groupsActions.ts","components/AggregatingTasksTable.tsx","components/GroupSelect.tsx","components/AggregatingTasksTableContainer.tsx","components/TasksTableContainer.tsx","components/QueueInfoBanner.tsx","components/QueueBreadcrumb.tsx","views/TasksView.tsx","views/TaskDetailsView.tsx","views/SettingsView.tsx","components/ServersTable.tsx","actions/serversActions.ts","views/ServersView.tsx","actions/redisInfoActions.ts","components/QueueLocationTable.tsx","views/RedisInfoView.tsx","actions/metricsActions.ts","components/QueueMetricsChart.tsx","components/MetricsFetchControls.tsx","views/MetricsView.tsx","views/PageNotFoundView.tsx","images/logo-color.svg","images/logo-white.svg","App.tsx","reducers/queuesReducer.ts","reducers/tasksReducer.ts","reducers/groupsReducer.ts","reducers/serversReducer.ts","reducers/snackbarReducer.ts","reducers/queueStatsReducer.ts","reducers/redisInfoReducer.ts","reducers/metricsReducer.ts","localStorage.ts","store.ts","serviceWorker.ts","parseFlags.ts","index.tsx"],"names":["paths","HOME","window","ROOT_PATH","SETTINGS","SERVERS","SCHEDULERS","QUEUE_DETAILS","REDIS","TASK_DETAILS","QUEUE_METRICS","queueDetailsPath","qname","taskStatus","path","replace","taskDetailsPath","taskId","POLL_INTERVAL_CHANGE","THEME_PREFERENCE_CHANGE","TOGGLE_DRAWER","TASK_ROWS_PER_PAGE_CHANGE","DAILY_STATS_KEY_CHANGE","taskRowsPerPageChange","value","type","useStyles","makeStyles","theme","createStyles","root","flexShrink","marginLeft","spacing","TablePaginationActions","props","classes","useTheme","count","page","rowsPerPage","onPageChange","className","IconButton","onClick","event","disabled","aria-label","direction","Math","ceil","max","rowsPerPageOptions","getBaseUrl","listQueues","a","axios","method","url","resp","data","deleteQueue","pauseQueue","resumeQueue","listQueueStats","listGroups","getTaskInfo","id","listActiveTasks","pageOpts","queryString","stringify","cancelActiveTask","cancelAllActiveTasks","batchCancelActiveTasks","taskIds","task_ids","listPendingTasks","listScheduledTasks","listRetryTasks","listArchivedTasks","listCompletedTasks","listAggregatingTasks","gname","archivePendingTask","batchArchivePendingTasks","archiveAllPendingTasks","deletePendingTask","batchDeletePendingTasks","deleteAllPendingTasks","deleteAggregatingTask","batchDeleteAggregatingTasks","deleteAllAggregatingTasks","runAggregatingTask","batchRunAggregatingTasks","runAllAggregatingTasks","archiveAggregatingTask","batchArchiveAggregatingTasks","archiveAllAggregatingTasks","runScheduledTask","archiveScheduledTask","deleteScheduledTask","batchDeleteScheduledTasks","deleteAllScheduledTasks","batchRunScheduledTasks","runAllScheduledTasks","batchArchiveScheduledTasks","archiveAllScheduledTasks","runRetryTask","archiveRetryTask","deleteRetryTask","batchDeleteRetryTasks","deleteAllRetryTasks","batchRunRetryTasks","runAllRetryTasks","batchArchiveRetryTasks","archiveAllRetryTasks","runArchivedTask","deleteArchivedTask","batchDeleteArchivedTasks","deleteAllArchivedTasks","batchRunArchivedTasks","runAllArchivedTasks","deleteCompletedTask","batchDeleteCompletedTasks","deleteAllCompletedTasks","listServers","listSchedulerEntries","listSchedulerEnqueueEvents","entryId","getRedisInfo","getMetrics","endTime","duration","queues","params","endtime","length","join","toErrorStringWithHttpStatus","error","response","status","statusText","toErrorString","durationFromSeconds","totalSeconds","hour","floor","minute","second","durationBetween","start","end","durationInMillisec","stringifyDuration","d","n","durationBefore","timestamp","Date","parse","now","timeAgo","timeAgoUnix","console","unixtime","uuidPrefix","uuid","idx","indexOf","substr","percentage","numerator","denominator","perc","toFixed","prettifyPayload","p","JSON","isJsonPayload","currentUnixtime","durationRegex","LIST_QUEUES_BEGIN","LIST_QUEUES_SUCCESS","LIST_QUEUES_ERROR","DELETE_QUEUE_BEGIN","DELETE_QUEUE_SUCCESS","DELETE_QUEUE_ERROR","PAUSE_QUEUE_BEGIN","PAUSE_QUEUE_SUCCESS","PAUSE_QUEUE_ERROR","RESUME_QUEUE_BEGIN","RESUME_QUEUE_SUCCESS","RESUME_QUEUE_ERROR","listQueuesAsync","dispatch","payload","deleteQueueAsync","queue","LIST_QUEUE_STATS_BEGIN","LIST_QUEUE_STATS_SUCCESS","LIST_QUEUE_STATS_ERROR","QueueSizeChart","history","useHistory","ResponsiveContainer","maxBarSize","allQueues","map","b","activeLabel","includes","push","style","cursor","CartesianGrid","strokeDasharray","XAxis","dataKey","stroke","palette","text","secondary","YAxis","Tooltip","Legend","Bar","stackId","fill","ProcessedTasksChart","success","light","connector","SortDirection","connect","state","ownProps","requestPending","q","find","name","undefined","Dialog","open","onClose","aria-labelledby","aria-describedby","size","DialogTitle","DialogContent","DialogContentText","DialogActions","Button","color","autoFocus","SortBy","table","minWidth","fixedCell","position","zIndex","left","background","paper","colConfigs","label","key","sortBy","Queue","align","State","Size","MemoryUsage","Latency","Processed","Failed","ErrorRate","None","sortQueues","cmpFn","copy","sort","QueuesOverviewTable","useState","setSortBy","Asc","sortDir","setSortDir","queueToDelete","setQueueToDelete","Fragment","TableContainer","Table","TableHead","TableRow","filter","cfg","READ_ONLY","i","TableCell","clsx","TableSortLabel","active","sortKey","e","nextSortDir","Desc","TableBody","q1","q2","isQ1Smaller","paused","memory_usage_bytes","latency_msec","processed","failed","q1ErrorRate","q2ErrorRate","Row","onPauseClick","onResumeClick","onDeleteClick","useRowStyles","row","borderBottomWidth","linkText","textDecoration","primary","textGreen","dark","textRed","boldCell","fontWeight","actionIconsContainer","display","justifyContent","showIcons","setShowIcons","component","scope","to","prettyBytes","display_latency","onMouseEnter","onMouseLeave","title","fontSize","withStyles","tooltip","backgroundColor","maxWidth","typography","pxToRem","border","popper","buttonContained","isDarkTheme","default","action","hover","SplitButton","React","setOpen","anchorRef","useRef","initialSelectedKey","selectedKey","setSelectedKey","handleClose","current","contains","target","selectedOpt","options","opt","ButtonGroup","variant","ref","disableElevation","contained","aria-controls","aria-expanded","aria-haspopup","prevOpen","Popper","anchorEl","role","transition","disablePortal","TransitionProps","placement","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","MenuItem","selected","onSelect","usePolling","doFn","interval","useEffect","setInterval","clearInterval","useQuery","search","useLocation","useMemo","URLSearchParams","DailyStatsChart","queueStats","numDays","dataByDate","stat","hasOwnProperty","date","succeeded","Object","values","sortByDate","slice","makeChartData","LineChart","minTickGap","Line","main","x","y","container","paddingTop","paddingBottom","padding","overflow","flexDirection","chartHeader","alignItems","marginBottom","chartHeaderTitle","chartContainer","width","height","infoIcon","grey","tooltipSection","tableContainer","mapDispatchToProps","pauseQueueAsync","resumeQueueAsync","listQueueStatsAsync","dailyStatsKeyChange","ThemePreference","loading","currentStats","pollInterval","settings","dailyStatsKey","dailyStatsChartType","qnames","processedStats","Container","Grid","item","xs","Alert","severity","AlertTitle","Typography","initialState","themePreference","SystemDefault","isDrawerOpen","taskRowsPerPage","settingsReducer","CLOSE_SNACKBAR","listItem","borderTopRightRadius","borderBottomRightRadius","selectedText","selectedIcon","ListItemLink","icon","isMatch","useRouteMatch","strict","sensitive","exact","renderLink","forwardRef","itemProps","ListItem","button","ListItemIcon","ListItemText","SyntaxHighlighter","styleDark","styleLight","language","customStyle","children","ReactSyntaxHighlighter","registerLanguage","json","LIST_SCHEDULER_ENTRIES_BEGIN","LIST_SCHEDULER_ENTRIES_SUCCESS","LIST_SCHEDULER_ENTRIES_ERROR","LIST_SCHEDULER_ENQUEUE_EVENTS_BEGIN","LIST_SCHEDULER_ENQUEUE_EVENTS_SUCCESS","LIST_SCHEDULER_ENQUEUE_EVENTS_ERROR","getEnqueueEventsEntry","enqueueEventsByEntryId","schedulerEntriesReducer","entries","entry","sortByEnqueuedAt","e1","e2","enqueued_at","newData","uniqBy","events","stickyHeaderCell","schedulerEntries","listSchedulerEnqueueEventsAsync","stickyHeader","task_id","noBorder","modal","modalContent","outline","borderRadius","shape","eventsTable","maxHeight","EntryId","Spec","Type","Payload","Options","NextEnqueue","PrevEnqueue","sortEntries","SchedulerEntriesTable","activeEntryId","setActiveEntryId","isE1Smaller","spec","task_type","task_payload","next_enqueue_at","e1PrevEnqueueAt","prev_enqueue_at","e2PrevEnqueueAt","isLastRow","onShowHistoryClick","Modal","gutterBottom","rowRoot","borderBottom","heading","paddingLeft","listSchedulerEntriesAsync","GET_TASK_INFO_BEGIN","GET_TASK_INFO_SUCCESS","GET_TASK_INFO_ERROR","LIST_ACTIVE_TASKS_BEGIN","LIST_ACTIVE_TASKS_SUCCESS","LIST_ACTIVE_TASKS_ERROR","LIST_PENDING_TASKS_BEGIN","LIST_PENDING_TASKS_SUCCESS","LIST_PENDING_TASKS_ERROR","LIST_SCHEDULED_TASKS_BEGIN","LIST_SCHEDULED_TASKS_SUCCESS","LIST_SCHEDULED_TASKS_ERROR","LIST_RETRY_TASKS_BEGIN","LIST_RETRY_TASKS_SUCCESS","LIST_RETRY_TASKS_ERROR","LIST_ARCHIVED_TASKS_BEGIN","LIST_ARCHIVED_TASKS_SUCCESS","LIST_ARCHIVED_TASKS_ERROR","LIST_COMPLETED_TASKS_BEGIN","LIST_COMPLETED_TASKS_SUCCESS","LIST_COMPLETED_TASKS_ERROR","LIST_AGGREGATING_TASKS_BEGIN","LIST_AGGREGATING_TASKS_SUCCESS","LIST_AGGREGATING_TASKS_ERROR","CANCEL_ACTIVE_TASK_BEGIN","CANCEL_ACTIVE_TASK_SUCCESS","CANCEL_ACTIVE_TASK_ERROR","CANCEL_ALL_ACTIVE_TASKS_BEGIN","CANCEL_ALL_ACTIVE_TASKS_SUCCESS","CANCEL_ALL_ACTIVE_TASKS_ERROR","BATCH_CANCEL_ACTIVE_TASKS_BEGIN","BATCH_CANCEL_ACTIVE_TASKS_SUCCESS","BATCH_CANCEL_ACTIVE_TASKS_ERROR","RUN_SCHEDULED_TASK_BEGIN","RUN_SCHEDULED_TASK_SUCCESS","RUN_SCHEDULED_TASK_ERROR","RUN_RETRY_TASK_BEGIN","RUN_RETRY_TASK_SUCCESS","RUN_RETRY_TASK_ERROR","RUN_ARCHIVED_TASK_BEGIN","RUN_ARCHIVED_TASK_SUCCESS","RUN_ARCHIVED_TASK_ERROR","DELETE_PENDING_TASK_BEGIN","DELETE_PENDING_TASK_SUCCESS","DELETE_PENDING_TASK_ERROR","ARCHIVE_PENDING_TASK_BEGIN","ARCHIVE_PENDING_TASK_SUCCESS","ARCHIVE_PENDING_TASK_ERROR","DELETE_SCHEDULED_TASK_BEGIN","DELETE_SCHEDULED_TASK_SUCCESS","DELETE_SCHEDULED_TASK_ERROR","ARCHIVE_SCHEDULED_TASK_BEGIN","ARCHIVE_SCHEDULED_TASK_SUCCESS","ARCHIVE_SCHEDULED_TASK_ERROR","ARCHIVE_RETRY_TASK_BEGIN","ARCHIVE_RETRY_TASK_SUCCESS","ARCHIVE_RETRY_TASK_ERROR","RUN_AGGREGATING_TASK_BEGIN","RUN_AGGREGATING_TASK_SUCCESS","RUN_AGGREGATING_TASK_ERROR","DELETE_AGGREGATING_TASK_BEGIN","DELETE_AGGREGATING_TASK_SUCCESS","DELETE_AGGREGATING_TASK_ERROR","ARCHIVE_AGGREGATING_TASK_BEGIN","ARCHIVE_AGGREGATING_TASK_SUCCESS","ARCHIVE_AGGREGATING_TASK_ERROR","BATCH_ARCHIVE_PENDING_TASKS_BEGIN","BATCH_ARCHIVE_PENDING_TASKS_SUCCESS","BATCH_ARCHIVE_PENDING_TASKS_ERROR","BATCH_DELETE_PENDING_TASKS_BEGIN","BATCH_DELETE_PENDING_TASKS_SUCCESS","BATCH_DELETE_PENDING_TASKS_ERROR","DELETE_ALL_PENDING_TASKS_BEGIN","DELETE_ALL_PENDING_TASKS_SUCCESS","DELETE_ALL_PENDING_TASKS_ERROR","ARCHIVE_ALL_PENDING_TASKS_BEGIN","ARCHIVE_ALL_PENDING_TASKS_SUCCESS","ARCHIVE_ALL_PENDING_TASKS_ERROR","BATCH_RUN_SCHEDULED_TASKS_BEGIN","BATCH_RUN_SCHEDULED_TASKS_SUCCESS","BATCH_RUN_SCHEDULED_TASKS_ERROR","BATCH_ARCHIVE_SCHEDULED_TASKS_BEGIN","BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS","BATCH_ARCHIVE_SCHEDULED_TASKS_ERROR","BATCH_DELETE_SCHEDULED_TASKS_BEGIN","BATCH_DELETE_SCHEDULED_TASKS_SUCCESS","BATCH_DELETE_SCHEDULED_TASKS_ERROR","RUN_ALL_SCHEDULED_TASKS_BEGIN","RUN_ALL_SCHEDULED_TASKS_SUCCESS","RUN_ALL_SCHEDULED_TASKS_ERROR","ARCHIVE_ALL_SCHEDULED_TASKS_BEGIN","ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS","ARCHIVE_ALL_SCHEDULED_TASKS_ERROR","DELETE_ALL_SCHEDULED_TASKS_BEGIN","DELETE_ALL_SCHEDULED_TASKS_SUCCESS","DELETE_ALL_SCHEDULED_TASKS_ERROR","DELETE_RETRY_TASK_BEGIN","DELETE_RETRY_TASK_SUCCESS","DELETE_RETRY_TASK_ERROR","BATCH_RUN_RETRY_TASKS_BEGIN","BATCH_RUN_RETRY_TASKS_SUCCESS","BATCH_RUN_RETRY_TASKS_ERROR","BATCH_ARCHIVE_RETRY_TASKS_BEGIN","BATCH_ARCHIVE_RETRY_TASKS_SUCCESS","BATCH_ARCHIVE_RETRY_TASKS_ERROR","BATCH_DELETE_RETRY_TASKS_BEGIN","BATCH_DELETE_RETRY_TASKS_SUCCESS","BATCH_DELETE_RETRY_TASKS_ERROR","RUN_ALL_RETRY_TASKS_BEGIN","RUN_ALL_RETRY_TASKS_SUCCESS","RUN_ALL_RETRY_TASKS_ERROR","ARCHIVE_ALL_RETRY_TASKS_BEGIN","ARCHIVE_ALL_RETRY_TASKS_SUCCESS","ARCHIVE_ALL_RETRY_TASKS_ERROR","DELETE_ALL_RETRY_TASKS_BEGIN","DELETE_ALL_RETRY_TASKS_SUCCESS","DELETE_ALL_RETRY_TASKS_ERROR","DELETE_ARCHIVED_TASK_BEGIN","DELETE_ARCHIVED_TASK_SUCCESS","DELETE_ARCHIVED_TASK_ERROR","BATCH_RUN_ARCHIVED_TASKS_BEGIN","BATCH_RUN_ARCHIVED_TASKS_SUCCESS","BATCH_RUN_ARCHIVED_TASKS_ERROR","BATCH_DELETE_ARCHIVED_TASKS_BEGIN","BATCH_DELETE_ARCHIVED_TASKS_SUCCESS","BATCH_DELETE_ARCHIVED_TASKS_ERROR","RUN_ALL_ARCHIVED_TASKS_BEGIN","RUN_ALL_ARCHIVED_TASKS_SUCCESS","RUN_ALL_ARCHIVED_TASKS_ERROR","DELETE_ALL_ARCHIVED_TASKS_BEGIN","DELETE_ALL_ARCHIVED_TASKS_SUCCESS","DELETE_ALL_ARCHIVED_TASKS_ERROR","DELETE_COMPLETED_TASK_BEGIN","DELETE_COMPLETED_TASK_SUCCESS","DELETE_COMPLETED_TASK_ERROR","DELETE_ALL_COMPLETED_TASKS_BEGIN","DELETE_ALL_COMPLETED_TASKS_SUCCESS","DELETE_ALL_COMPLETED_TASKS_ERROR","BATCH_DELETE_COMPLETED_TASKS_BEGIN","BATCH_DELETE_COMPLETED_TASKS_SUCCESS","BATCH_DELETE_COMPLETED_TASKS_ERROR","BATCH_RUN_AGGREGATING_TASKS_BEGIN","BATCH_RUN_AGGREGATING_TASKS_SUCCESS","BATCH_RUN_AGGREGATING_TASKS_ERROR","BATCH_ARCHIVE_AGGREGATING_TASKS_BEGIN","BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS","BATCH_ARCHIVE_AGGREGATING_TASKS_ERROR","BATCH_DELETE_AGGREGATING_TASKS_BEGIN","BATCH_DELETE_AGGREGATING_TASKS_SUCCESS","BATCH_DELETE_AGGREGATING_TASKS_ERROR","RUN_ALL_AGGREGATING_TASKS_BEGIN","RUN_ALL_AGGREGATING_TASKS_SUCCESS","RUN_ALL_AGGREGATING_TASKS_ERROR","ARCHIVE_ALL_AGGREGATING_TASKS_BEGIN","ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS","ARCHIVE_ALL_AGGREGATING_TASKS_ERROR","DELETE_ALL_AGGREGATING_TASKS_BEGIN","DELETE_ALL_AGGREGATING_TASKS_SUCCESS","DELETE_ALL_AGGREGATING_TASKS_ERROR","actionsContainer","moreIcon","marginRight","iconGroup","borderLeft","TableActions","menuAnchor","setMenuAnchor","closeMenu","currentTarget","keepMounted","Boolean","menuItemActions","showIconButtons","iconButtonActions","alert","borderTopLeftRadius","pagination","TasksTable","listTasks","pageSize","setPage","selectedIds","setSelectedIds","activeTaskId","setActiveTaskId","createAllActionHandler","createBatchActionHandler","then","createSingleActionHandler","allActions","deleteAllTasks","allActionPending","archiveAllTasks","runAllTasks","cancelAllTasks","batchActions","batchDeleteTasks","batchActionPending","batchArchiveTasks","batchRunTasks","batchCancelTasks","useCallback","tasks","taskState","rowCount","numSelected","Checkbox","indeterminate","checked","onChange","newSelected","t","inputProps","columns","col","task","renderRow","isSelected","onSelectChange","concat","onRunClick","runTask","deleteTask","onArchiveClick","archiveTask","onCancelClick","cancelTask","onActionCellEnter","onActionCellLeave","showActions","TableFooter","TablePagination","colSpan","totalTaskCount","SelectProps","native","newPage","onRowsPerPageChange","parseInt","ActionsComponent","boxShadow","shadows","borderBottomColor","actionCell","actionButton","idCell","copyButton","IdGroup","stopPropagation","navigator","clipboard","writeText","margin","canceling","is_orphaned","start_time","deadline","activeTasks","rowProps","deleted","pendingTasks","retried","max_retry","scheduledTasks","next_process_at","retryTasks","error_message","archivedTasks","last_failed_at","completedTasks","completed_at","result","ttl_seconds","LIST_GROUPS_BEGIN","LIST_GROUPS_SUCCESS","LIST_GROUPS_ERROR","listAggregatingTasksAsync","group","deleteAllAggregatingTasksAsync","archiveAllAggregatingTasksAsync","archived","runAllAggregatingTasksAsync","scheduled","batchDeleteAggregatingTasksAsync","batchRunAggregatingTasksAsync","batchArchiveAggregatingTasksAsync","deleteAggregatingTaskAsync","runAggregatingTaskAsync","archiveAggregatingTaskAsync","groups","groupsError","aggregatingTasks","pgn","selectedGroup","groupSelectOption","groupSize","textAlign","inputRoot","GroupSelect","inputValue","setInputValue","Autocomplete","newValue","onInputChange","newInputValue","disableListWrap","ListboxComponent","getOptionLabel","option","renderOption","renderInput","TextField","index","cloneElement","top","OuterElementContext","createContext","OuterElementType","outerProps","useContext","other","itemData","Children","toArray","smUp","useMediaQuery","breakpoints","up","noSsr","itemCount","itemSize","getChildSize","child","isValidElement","ListSubheader","gridRef","resetAfterIndex","useResetCache","Provider","reduce","outerElementType","innerElementType","overscanCount","groupSelector","paddingRight","listGroupsAsync","setSelectedGroup","TabPanel","hidden","flex","overflowY","queueInfo","pending","aggregating","retry","completed","header","chip","taskcount","searchbar","searchIcon","pointerEvents","inputInput","chips","searchQuery","setSearchQuery","c","Chip","InputBase","placeholder","input","onKeyDown","trim","banner","bannerItem","flexGrow","divider","StyledBreadcrumb","emphasize","QueueBreadcrumbs","setAnchorEl","getPaths","handleClick","preventDefault","Breadcrumbs","Link","queueName","deleteIcon","onDelete","breadcrumbs","tasksTable","validStatus","useParams","get","taskInfo","getTaskInfoAsync","marginTop","infoRow","infoKeyCell","infoValueCell","footer","md","timeout_seconds","startIcon","goBack","formControl","selectEmpty","select","pollIntervalChange","selectTheme","sliderValue","setSliderValue","justify","Slider","val","onChangeCommitted","valueLabelDisplay","step","marks","min","Select","labelId","Always","Never","HostPID","Started","Status","Queues","ActiveWorkers","sortServerInfos","ServersTable","servers","s1","s2","isS1Smaller","host","pid","s1StartTime","s2StartTime","s1Queues","keys","queue_priorities","s2Queues","active_workers","srv","server","link","concurrency","Collapse","in","timeout","unmountOnExit","worker","Box","strict_priority_enabled","LIST_SERVERS_BEGIN","LIST_SERVERS_SUCCESS","LIST_SERVERS_ERROR","listServersAsync","GET_REDIS_INFO_BEGIN","GET_REDIS_INFO_SUCCESS","GET_REDIS_INFO_ERROR","QueueLocationTable","queueLocations","loc","keyslot","nodes","RedisMetricCards","redisInfo","MetricCard","content","redis_version","uptime_in_days","used_memory_human","used_memory_peak_human","mem_fragmentation_ratio","connected_clients","connected_slaves","rdb_last_save_time","rdb_changes_since_last_save","Card","CardContent","redis","redisAddress","address","redisInfoRaw","rawData","redisClusterEnabled","cluster","redisClusterNodesRaw","rawClusterNodes","getRedisInfoAsync","href","GET_METRICS_BEGIN","GET_METRICS_SUCCESS","GET_METRICS_ERROR","lineColors","QueueMetricsChart","metrics","byTimestamp","ts","metric","parseFloat","toChartData","domain","startTime","tickFormatter","toLocaleTimeString","scale","yAxisTickFormatter","labelFormatter","dot","defaultProps","toString","mapStateToProps","endTimeCaption","shiftButtons","buttonGroupRoot","endTimeShiftControls","borderBottomStyle","leftShiftButtons","rightShiftButtons","controlsContainer","controlSelectorBox","controlEndTimeSelector","controlDurationSelector","radioButtonRoot","formControlLabel","buttonLabel","textTransform","formControlRoot","formLabel","customInputField","filterButton","queueFilters","checkbox","day","formatTime","tz","timeZoneName","split","dayjs","unix","format","RadioInput","FormControlLabel","control","Radio","useShiftButtonStyles","dense","iconRoot","ShiftButton","endTimeSec","durationSec","endTimeOption","customEndTime","durationOption","customDuration","toISOString","customEndTimeError","customDurationError","getInitialState","setState","timePopoverAnchorElem","setTimePopoverAnchorElem","queuePopoverAnchorElem","setQueuePopoverAnchorElem","isTimePopoverOpen","isQueuePopoverOpen","onEndTimeChange","shiftBy","deltaSec","prevState","Popover","anchorOrigin","vertical","horizontal","FormLabel","RadioGroup","persist","timeUsecOrNaN","isNaN","helperText","isEndTimeFixed","onDurationChange","s","test","Error","parseDuration","FormGroup","selectedQueues","removeQueue","addQueue","appBar","right","chartInfo","errorMessage","warningIcon","getMetricsAsync","ENDTIME_URL_PARAM_KEY","DURATION_URL_PARAM_KEY","query","endTimeStr","durationStr","setEndTimeSec","setDurationSec","setSelectedQueues","urlQuery","location","tasks_processed_per_second","ChartRow","description","tasks_failed_per_second","error_rate","queue_size","queue_latency_seconds","queue_memory_usage_approx_bytes","pending_tasks_by_queue","retry_tasks_by_queue","archived_tasks_by_queue","headingText","PageNotFoundView","_extends","assign","arguments","source","prototype","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgLogoColor","_ref","svgRef","titleId","viewBox","xmlns","ForwardRef","SvgLogoWhite","closeSnackbar","toggleDrawer","SlideUpTransition","Slide","snackbar","prefersDarkMode","createTheme","toolbar","toolbarIcon","mixins","drawer","menuButton","menuButtonHidden","drawerPaper","whiteSpace","transitions","create","easing","sharp","enteringScreen","drawerPaperClose","overflowX","leavingScreen","snackbarCloseIcon","appBarSpacer","mainContainer","contentWrapper","sidebarContainer","ThemeProvider","AppBar","Toolbar","edge","Drawer","Snackbar","isOpen","autoHideDuration","TransitionComponent","SnackbarContent","message","List","PROMETHEUS_SERVER_ADDRESS","queuesReducer","stats","archived_ids","deleted_ids","pending_ids","tasksReducer","canceled_ids","error_ids","groupsReducer","snackbarReducer","isSameDate","ts1","ts2","date1","date2","getUTCDate","getUTCMonth","getUTCFullYear","LOCAL_STORAGE_KEY","rootReducer","combineReducers","newStats","info","raw_info","raw_cluster_nodes","queue_locations","preloadedState","serializedState","localStorage","getItem","savedState","settingsInitialState","err","log","loadState","store","configureStore","reducer","hostname","match","FLAG_ROOT_PATH","FLAG_PROMETHEUS_SERVER_ADDRESS","startsWith","FLAG_READ_ONLY","currentSettings","subscribe","getState","setItem","saveState","ReactDOM","render","StrictMode","CssBaseline","document","getElementById","serviceWorker","ready","registration","unregister","catch"],"mappings":"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","file":"static/js/main.5adda2da.chunk.js","sourcesContent":["export const paths = () => ({\n HOME: `${window.ROOT_PATH}/`,\n SETTINGS: `${window.ROOT_PATH}/settings`,\n SERVERS: `${window.ROOT_PATH}/servers`,\n SCHEDULERS: `${window.ROOT_PATH}/schedulers`,\n QUEUE_DETAILS: `${window.ROOT_PATH}/queues/:qname`,\n REDIS: `${window.ROOT_PATH}/redis`,\n TASK_DETAILS: `${window.ROOT_PATH}/queues/:qname/tasks/:taskId`,\n QUEUE_METRICS: `${window.ROOT_PATH}/q/metrics`,\n});\n\n/**************************************************************\n Path Helper functions\n **************************************************************/\n\nexport function queueDetailsPath(qname: string, taskStatus?: string): string {\n const path = paths().QUEUE_DETAILS.replace(\":qname\", qname);\n if (taskStatus) {\n return `${path}?status=${taskStatus}`;\n }\n return path;\n}\n\nexport function taskDetailsPath(qname: string, taskId: string): string {\n return paths()\n .TASK_DETAILS.replace(\":qname\", qname)\n .replace(\":taskId\", taskId);\n}\n\n/**************************************************************\n URL Params\n **************************************************************/\n\nexport interface QueueDetailsRouteParams {\n qname: string;\n}\n\nexport interface TaskDetailsRouteParams {\n qname: string;\n taskId: string;\n}\n","import { ThemePreference } from \"../reducers/settingsReducer\";\nimport { DailyStatsKey } from \"../views/DashboardView\";\n// List of settings related action types.\nexport const POLL_INTERVAL_CHANGE = \"POLL_INTERVAL_CHANGE\";\nexport const THEME_PREFERENCE_CHANGE = \"THEME_PREFERENCE_CHANGE\";\nexport const TOGGLE_DRAWER = \"TOGGLE_DRAWER\";\nexport const TASK_ROWS_PER_PAGE_CHANGE = \"TASK_ROWS_PER_PAGE_CHANGE\";\nexport const DAILY_STATS_KEY_CHANGE = \"DAILY_STATS_KEY_CHANGE\";\n\ninterface PollIntervalChangeAction {\n type: typeof POLL_INTERVAL_CHANGE;\n value: number; // new poll interval value in seconds\n}\n\ninterface ThemePreferenceChangeAction {\n type: typeof THEME_PREFERENCE_CHANGE;\n value: ThemePreference;\n}\n\ninterface ToggleDrawerAction {\n type: typeof TOGGLE_DRAWER;\n}\n\ninterface TaskRowsPerPageChange {\n type: typeof TASK_ROWS_PER_PAGE_CHANGE;\n value: number;\n}\n\ninterface DailyStatsKeyChange {\n type: typeof DAILY_STATS_KEY_CHANGE;\n value: DailyStatsKey;\n}\n\n// Union of all settings related action types.\nexport type SettingsActionTypes =\n | PollIntervalChangeAction\n | ThemePreferenceChangeAction\n | ToggleDrawerAction\n | TaskRowsPerPageChange\n | DailyStatsKeyChange;\n\nexport function pollIntervalChange(value: number) {\n return {\n type: POLL_INTERVAL_CHANGE,\n value,\n };\n}\n\nexport function selectTheme(value: ThemePreference) {\n return {\n type: THEME_PREFERENCE_CHANGE,\n value,\n };\n}\n\nexport function toggleDrawer() {\n return { type: TOGGLE_DRAWER };\n}\n\nexport function taskRowsPerPageChange(value: number) {\n return {\n type: TASK_ROWS_PER_PAGE_CHANGE,\n value,\n };\n}\n\nexport function dailyStatsKeyChange(value: DailyStatsKey) {\n return {\n type: DAILY_STATS_KEY_CHANGE,\n value,\n }\n}\n","import React from \"react\";\nimport {\n useTheme,\n makeStyles,\n Theme,\n createStyles,\n} from \"@material-ui/core/styles\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport FirstPageIcon from \"@material-ui/icons/FirstPage\";\nimport KeyboardArrowLeft from \"@material-ui/icons/KeyboardArrowLeft\";\nimport KeyboardArrowRight from \"@material-ui/icons/KeyboardArrowRight\";\nimport LastPageIcon from \"@material-ui/icons/LastPage\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flexShrink: 0,\n marginLeft: theme.spacing(2.5),\n },\n })\n);\n\ninterface TablePaginationActionsProps {\n count: number;\n page: number;\n rowsPerPage: number;\n onPageChange: (\n event: React.MouseEvent,\n newPage: number\n ) => void;\n}\n\nfunction TablePaginationActions(props: TablePaginationActionsProps) {\n const classes = useStyles();\n const theme = useTheme();\n const { count, page, rowsPerPage, onPageChange } = props;\n\n const handleFirstPageButtonClick = (\n event: React.MouseEvent\n ) => {\n onPageChange(event, 0);\n };\n\n const handleBackButtonClick = (\n event: React.MouseEvent\n ) => {\n onPageChange(event, page - 1);\n };\n\n const handleNextButtonClick = (\n event: React.MouseEvent\n ) => {\n onPageChange(event, page + 1);\n };\n\n const handleLastPageButtonClick = (\n event: React.MouseEvent\n ) => {\n onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\n };\n\n return (\n
\n \n {theme.direction === \"rtl\" ? : }\n \n \n {theme.direction === \"rtl\" ? (\n \n ) : (\n \n )}\n \n = Math.ceil(count / rowsPerPage) - 1}\n aria-label=\"next page\"\n >\n {theme.direction === \"rtl\" ? (\n \n ) : (\n \n )}\n \n = Math.ceil(count / rowsPerPage) - 1}\n aria-label=\"last page\"\n >\n {theme.direction === \"rtl\" ? : }\n \n
\n );\n}\n\nexport default TablePaginationActions;\n\nexport const rowsPerPageOptions = [10, 20, 30, 60, 100];\nexport const defaultPageSize = 20;\n","import axios from \"axios\";\nimport queryString from \"query-string\";\n\n// In production build, API server is on listening on the same port as\n// the static file server.\n// In developement, we assume that the API server is listening on port 8080.\nconst getBaseUrl = () =>\n process.env.NODE_ENV === \"production\"\n ? `${window.ROOT_PATH}/api`\n : `http://localhost:8080${window.ROOT_PATH}/api`;\n\nexport interface ListQueuesResponse {\n queues: Queue[];\n}\n\nexport interface ListTasksResponse {\n tasks: TaskInfo[];\n stats: Queue;\n}\n\nexport interface ListAggregatingTasksResponse {\n tasks: TaskInfo[];\n stats: Queue;\n groups: GroupInfo[];\n}\n\nexport interface ListServersResponse {\n servers: ServerInfo[];\n}\n\nexport interface ListSchedulerEntriesResponse {\n entries: SchedulerEntry[];\n}\n\nexport interface ListSchedulerEnqueueEventsResponse {\n events: SchedulerEnqueueEvent[];\n}\n\nexport interface BatchCancelTasksResponse {\n canceled_ids: string[];\n error_ids: string[];\n}\n\nexport interface BatchDeleteTasksResponse {\n deleted_ids: string[];\n failed_ids: string[];\n}\n\nexport interface BatchRunTasksResponse {\n pending_ids: string[];\n error_ids: string[];\n}\n\nexport interface BatchArchiveTasksResponse {\n archived_ids: string[];\n error_ids: string[];\n}\n\nexport interface DeleteAllTasksResponse {\n deleted: number;\n}\n\nexport interface ArchiveAllTasksResponse {\n archived: number;\n}\n\nexport interface RunAllTasksResponse {\n scheduled: number;\n}\n\nexport interface ListQueueStatsResponse {\n stats: { [qname: string]: DailyStat[] };\n}\n\nexport interface ListGroupsResponse {\n stats: Queue;\n groups: GroupInfo[];\n}\n\nexport interface RedisInfoResponse {\n address: string;\n info: RedisInfo;\n raw_info: string;\n cluster: boolean;\n\n // following fields are set only when cluster=true\n raw_cluster_nodes: string;\n queue_locations: QueueLocation[] | null;\n}\n\n// Describes location of a queue in cluster.\nexport interface QueueLocation {\n queue: string; // queue name\n keyslot: number; // cluster keyslot\n nodes: string[]; // node addresses\n}\n\nexport interface MetricsResponse {\n queue_size: PrometheusMetricsResponse;\n queue_latency_seconds: PrometheusMetricsResponse;\n queue_memory_usage_approx_bytes: PrometheusMetricsResponse;\n tasks_processed_per_second: PrometheusMetricsResponse;\n tasks_failed_per_second: PrometheusMetricsResponse;\n error_rate: PrometheusMetricsResponse;\n pending_tasks_by_queue: PrometheusMetricsResponse;\n retry_tasks_by_queue: PrometheusMetricsResponse;\n archived_tasks_by_queue: PrometheusMetricsResponse;\n}\n\nexport interface PrometheusMetricsResponse {\n status: \"success\" | \"error\";\n data?: MetricsResult; // present if status === \"success\"\n error?: string; // present if status === \"error\"\n errorType?: string; // present if status === \"error\"\n}\n\nexport interface MetricsResult {\n resultType: string;\n result: Metrics[];\n}\n\nexport interface Metrics {\n metric: MetricsInfo;\n values: [number, string][]; // [unixtime, value]\n}\n\nexport interface MetricsInfo {\n __name__: string;\n instance: string;\n job: string;\n\n // labels (may or may not be present depending on metrics)\n queue?: string;\n state?: string;\n}\n\n// Return value from redis INFO command.\n// See https://redis.io/commands/info#return-value.\nexport interface RedisInfo {\n active_defrag_hits: string;\n active_defrag_key_hits: string;\n active_defrag_key_misses: string;\n active_defrag_misses: string;\n active_defrag_running: string;\n allocator_active: string;\n allocator_allocated: string;\n allocator_frag_bytes: string;\n allocator_frag_ratio: string;\n allocator_resident: string;\n allocator_rss_bytes: string;\n allocator_rss_ratio: string;\n aof_current_rewrite_time_sec: string;\n aof_enabled: string;\n aof_last_bgrewrite_status: string;\n aof_last_cow_size: string;\n aof_last_rewrite_time_sec: string;\n aof_last_write_status: string;\n aof_rewrite_in_progress: string;\n aof_rewrite_scheduled: string;\n arch_bits: string;\n atomicvar_api: string;\n blocked_clients: string;\n client_recent_max_input_buffer: string;\n client_recent_max_output_buffer: string;\n clients_in_timeout_table: string;\n cluster_enabled: string;\n config_file: string;\n configured_hz: string;\n connected_clients: string;\n connected_slaves: string;\n evicted_keys: string;\n executable: string;\n expire_cycle_cpu_milliseconds: string;\n expired_keys: string;\n expired_stale_perc: string;\n expired_time_cap_reached_count: string;\n gcc_version: string;\n hz: string;\n instantaneous_input_kbps: string;\n instantaneous_ops_per_sec: string;\n instantaneous_output_kbps: string;\n keyspace_hits: string;\n keyspace_misses: string;\n latest_fork_usec: string;\n lazyfree_pending_objects: string;\n loading: string;\n lru_clock: string;\n master_repl_offset: string;\n master_replid: string;\n master_replid2: string;\n maxmemory: string;\n maxmemory_human: string;\n maxmemory_policy: string;\n mem_allocator: string;\n mem_aof_buffer: string;\n mem_clients_normal: string;\n mem_clients_slaves: string;\n mem_fragmentation_bytes: string;\n mem_fragmentation_ratio: string;\n mem_not_counted_for_evict: string;\n mem_replication_backlog: string;\n migrate_cached_sockets: string;\n module_fork_in_progress: string;\n module_fork_last_cow_size: string;\n multiplexing_api: string;\n number_of_cached_scripts: string;\n os: string;\n process_id: string;\n pubsub_channels: string;\n pubsub_patterns: string;\n rdb_bgsave_in_progress: string;\n rdb_changes_since_last_save: string;\n rdb_current_bgsave_time_sec: string;\n rdb_last_bgsave_status: string;\n rdb_last_bgsave_time_sec: string;\n rdb_last_cow_size: string;\n rdb_last_save_time: string;\n redis_build_id: string;\n redis_git_dirty: string;\n redis_git_sha1: string;\n redis_mode: string;\n redis_version: string;\n rejected_connections: string;\n repl_backlog_active: string;\n repl_backlog_first_byte_offset: string;\n repl_backlog_histlen: string;\n repl_backlog_size: string;\n role: string;\n rss_overhead_bytes: string;\n rss_overhead_ratio: string;\n run_id: string;\n second_repl_offset: string;\n slave_expires_tracked_keys: string;\n sync_full: string;\n sync_partial_err: string;\n sync_partial_ok: string;\n tcp_port: string;\n total_commands_processed: string;\n total_connections_received: string;\n total_net_input_bytes: string;\n total_net_output_bytes: string;\n total_system_memory: string;\n total_system_memory_human: string;\n tracking_clients: string;\n tracking_total_items: string;\n tracking_total_keys: string;\n tracking_total_prefixes: string;\n unexpected_error_replies: string;\n uptime_in_days: string;\n uptime_in_seconds: string;\n used_cpu_sys: string;\n used_cpu_sys_children: string;\n used_cpu_user: string;\n used_cpu_user_children: string;\n used_memory: string;\n used_memory_dataset: string;\n used_memory_dataset_perc: string;\n used_memory_human: string;\n used_memory_lua: string;\n used_memory_lua_human: string;\n used_memory_overhead: string;\n used_memory_peak: string;\n used_memory_peak_human: string;\n used_memory_peak_perc: string;\n used_memory_rss: string;\n used_memory_rss_human: string;\n used_memory_scripts: string;\n used_memory_scripts_human: string;\n used_memory_startup: string;\n}\n\nexport interface GroupInfo {\n group: string;\n size: number;\n}\n\nexport interface Queue {\n queue: string;\n paused: boolean;\n size: number;\n groups: number;\n latency_msec: number;\n display_latency: string;\n memory_usage_bytes: number;\n active: number;\n pending: number;\n aggregating: number;\n scheduled: number;\n retry: number;\n archived: number;\n completed: number;\n processed: number;\n failed: number;\n timestamp: string;\n}\n\nexport interface DailyStat {\n queue: string;\n date: string;\n processed: number;\n failed: number;\n}\n\nexport interface TaskInfo {\n id: string;\n queue: string;\n type: string;\n payload: string;\n state: string;\n start_time: string; // Only applies to task.state == 'active'\n max_retry: number;\n retried: number;\n last_failed_at: string;\n error_message: string;\n next_process_at: string;\n timeout_seconds: number;\n deadline: string;\n group: string;\n completed_at: string;\n result: string;\n ttl_seconds: number;\n is_orphaned: boolean; // Only applies to task.state == 'active'\n}\n\nexport interface ServerInfo {\n id: string;\n host: string;\n pid: number;\n concurrency: number;\n queue_priorities: { [qname: string]: number };\n strict_priority_enabled: boolean;\n start_time: string;\n status: string;\n active_workers: WorkerInfo[];\n}\n\nexport interface WorkerInfo {\n task_id: string;\n queue: string;\n task_type: string;\n task_payload: string;\n start_time: string;\n}\n\nexport interface SchedulerEntry {\n id: string;\n spec: string;\n task_type: string;\n task_payload: string;\n options: string[];\n next_enqueue_at: string;\n // prev_enqueue_at will be omitted\n // if there were no previous enqueue events.\n prev_enqueue_at?: string;\n}\n\nexport interface SchedulerEnqueueEvent {\n task_id: string;\n enqueued_at: string;\n}\n\nexport interface PaginationOptions extends Record {\n size?: number; // size of the page\n page?: number; // page number (1 being the first page)\n}\n\nexport async function listQueues(): Promise {\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/queues`,\n });\n return resp.data;\n}\n\nexport async function deleteQueue(qname: string): Promise {\n await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}`,\n });\n}\n\nexport async function pauseQueue(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}:pause`,\n });\n}\n\nexport async function resumeQueue(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}:resume`,\n });\n}\n\nexport async function listQueueStats(): Promise {\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/queue_stats`,\n });\n return resp.data;\n}\n\nexport async function listGroups(qname: string): Promise {\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/queues/${qname}/groups`,\n });\n return resp.data;\n}\n\nexport async function getTaskInfo(\n qname: string,\n id: string\n): Promise {\n const url = `${getBaseUrl()}/queues/${qname}/tasks/${id}`;\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function listActiveTasks(\n qname: string,\n pageOpts?: PaginationOptions\n): Promise {\n let url = `${getBaseUrl()}/queues/${qname}/active_tasks`;\n if (pageOpts) {\n url += `?${queryString.stringify(pageOpts)}`;\n }\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function cancelActiveTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/active_tasks/${taskId}:cancel`,\n });\n}\n\nexport async function cancelAllActiveTasks(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/active_tasks:cancel_all`,\n });\n}\n\nexport async function batchCancelActiveTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/active_tasks:batch_cancel`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function listPendingTasks(\n qname: string,\n pageOpts?: PaginationOptions\n): Promise {\n let url = `${getBaseUrl()}/queues/${qname}/pending_tasks`;\n if (pageOpts) {\n url += `?${queryString.stringify(pageOpts)}`;\n }\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function listScheduledTasks(\n qname: string,\n pageOpts?: PaginationOptions\n): Promise {\n let url = `${getBaseUrl()}/queues/${qname}/scheduled_tasks`;\n if (pageOpts) {\n url += `?${queryString.stringify(pageOpts)}`;\n }\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function listRetryTasks(\n qname: string,\n pageOpts?: PaginationOptions\n): Promise {\n let url = `${getBaseUrl()}/queues/${qname}/retry_tasks`;\n if (pageOpts) {\n url += `?${queryString.stringify(pageOpts)}`;\n }\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function listArchivedTasks(\n qname: string,\n pageOpts?: PaginationOptions\n): Promise {\n let url = `${getBaseUrl()}/queues/${qname}/archived_tasks`;\n if (pageOpts) {\n url += `?${queryString.stringify(pageOpts)}`;\n }\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function listCompletedTasks(\n qname: string,\n pageOpts?: PaginationOptions\n): Promise {\n let url = `${getBaseUrl()}/queues/${qname}/completed_tasks`;\n if (pageOpts) {\n url += `?${queryString.stringify(pageOpts)}`;\n }\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function listAggregatingTasks(\n qname: string,\n gname: string,\n pageOpts?: PaginationOptions\n): Promise {\n let url = `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks`;\n if (pageOpts) {\n url += `?${queryString.stringify(pageOpts)}`;\n }\n const resp = await axios({\n method: \"get\",\n url,\n });\n return resp.data;\n}\n\nexport async function archivePendingTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/pending_tasks/${taskId}:archive`,\n });\n}\n\nexport async function batchArchivePendingTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/pending_tasks:batch_archive`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function archiveAllPendingTasks(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/pending_tasks:archive_all`,\n });\n}\n\nexport async function deletePendingTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/pending_tasks/${taskId}`,\n });\n}\n\nexport async function batchDeletePendingTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/pending_tasks:batch_delete`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function deleteAllPendingTasks(\n qname: string\n): Promise {\n const resp = await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/pending_tasks:delete_all`,\n });\n return resp.data;\n}\n\nexport async function deleteAggregatingTask(\n qname: string,\n gname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks/${taskId}`,\n });\n}\n\nexport async function batchDeleteAggregatingTasks(\n qname: string,\n gname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks:batch_delete`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function deleteAllAggregatingTasks(\n qname: string,\n gname: string\n): Promise {\n const resp = await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks:delete_all`,\n });\n return resp.data;\n}\n\nexport async function runAggregatingTask(\n qname: string,\n gname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks/${taskId}:run`,\n });\n}\n\nexport async function batchRunAggregatingTasks(\n qname: string,\n gname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks:batch_run`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function runAllAggregatingTasks(\n qname: string,\n gname: string\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks:run_all`,\n });\n return resp.data;\n}\n\nexport async function archiveAggregatingTask(\n qname: string,\n gname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks/${taskId}:archive`,\n });\n}\n\nexport async function batchArchiveAggregatingTasks(\n qname: string,\n gname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks:batch_archive`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function archiveAllAggregatingTasks(\n qname: string,\n gname: string\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/groups/${gname}/aggregating_tasks:archive_all`,\n });\n return resp.data;\n}\n\nexport async function runScheduledTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks/${taskId}:run`,\n });\n}\n\nexport async function archiveScheduledTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks/${taskId}:archive`,\n });\n}\n\nexport async function deleteScheduledTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks/${taskId}`,\n });\n}\n\nexport async function batchDeleteScheduledTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks:batch_delete`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function deleteAllScheduledTasks(\n qname: string\n): Promise {\n const resp = await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks:delete_all`,\n });\n return resp.data;\n}\n\nexport async function batchRunScheduledTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks:batch_run`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function runAllScheduledTasks(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks:run_all`,\n });\n}\n\nexport async function batchArchiveScheduledTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks:batch_archive`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function archiveAllScheduledTasks(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/scheduled_tasks:archive_all`,\n });\n}\n\nexport async function runRetryTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks/${taskId}:run`,\n });\n}\n\nexport async function archiveRetryTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks/${taskId}:archive`,\n });\n}\n\nexport async function deleteRetryTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks/${taskId}`,\n });\n}\n\nexport async function batchDeleteRetryTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks:batch_delete`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function deleteAllRetryTasks(\n qname: string\n): Promise {\n const resp = await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks:delete_all`,\n });\n return resp.data;\n}\n\nexport async function batchRunRetryTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks:batch_run`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function runAllRetryTasks(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks:run_all`,\n });\n}\n\nexport async function batchArchiveRetryTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks:batch_archive`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function archiveAllRetryTasks(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/retry_tasks:archive_all`,\n });\n}\n\nexport async function runArchivedTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/archived_tasks/${taskId}:run`,\n });\n}\n\nexport async function deleteArchivedTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/archived_tasks/${taskId}`,\n });\n}\n\nexport async function batchDeleteArchivedTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/archived_tasks:batch_delete`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function deleteAllArchivedTasks(\n qname: string\n): Promise {\n const resp = await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/archived_tasks:delete_all`,\n });\n return resp.data;\n}\n\nexport async function batchRunArchivedTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/archived_tasks:batch_run`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function runAllArchivedTasks(qname: string): Promise {\n await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/archived_tasks:run_all`,\n });\n}\n\nexport async function deleteCompletedTask(\n qname: string,\n taskId: string\n): Promise {\n await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/completed_tasks/${taskId}`,\n });\n}\n\nexport async function batchDeleteCompletedTasks(\n qname: string,\n taskIds: string[]\n): Promise {\n const resp = await axios({\n method: \"post\",\n url: `${getBaseUrl()}/queues/${qname}/completed_tasks:batch_delete`,\n data: {\n task_ids: taskIds,\n },\n });\n return resp.data;\n}\n\nexport async function deleteAllCompletedTasks(\n qname: string\n): Promise {\n const resp = await axios({\n method: \"delete\",\n url: `${getBaseUrl()}/queues/${qname}/completed_tasks:delete_all`,\n });\n return resp.data;\n}\n\nexport async function listServers(): Promise {\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/servers`,\n });\n return resp.data;\n}\n\nexport async function listSchedulerEntries(): Promise {\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/scheduler_entries`,\n });\n return resp.data;\n}\n\nexport async function listSchedulerEnqueueEvents(\n entryId: string\n): Promise {\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/scheduler_entries/${entryId}/enqueue_events`,\n });\n return resp.data;\n}\n\nexport async function getRedisInfo(): Promise {\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/redis_info`,\n });\n return resp.data;\n}\n\ninterface MetricsEndpointParams {\n endtime: number;\n duration: number;\n queues?: string; // comma-separated list of queues\n}\n\nexport async function getMetrics(\n endTime: number,\n duration: number,\n queues: string[]\n): Promise {\n let params: MetricsEndpointParams = {\n endtime: endTime,\n duration: duration,\n };\n if (queues && queues.length > 0) {\n params.queues = queues.join(\",\");\n }\n const resp = await axios({\n method: \"get\",\n url: `${getBaseUrl()}/metrics?${queryString.stringify(params)}`,\n });\n return resp.data;\n}\n","import { AxiosError } from \"axios\";\n\n// toErrorStringWithHttpStatus returns a string representaion of axios error with HTTP status.\nexport function toErrorStringWithHttpStatus(error: AxiosError): string {\n const { response } = error;\n if (!response) {\n return \"error: no error response data available\";\n }\n return `${response.status} (${response.statusText}): ${response.data}`;\n}\n\n// toErrorString returns a string representaion of axios error.\nexport function toErrorString(error: AxiosError): string {\n const { response } = error;\n if (!response) {\n return \"Unknown error occurred. See the logs for details.\";\n }\n return response.data;\n}\n\ninterface Duration {\n hour: number;\n minute: number;\n second: number;\n totalSeconds: number;\n}\n\n// Returns a duration from the number of seconds provided.\nexport function durationFromSeconds(totalSeconds: number): Duration {\n const hour = Math.floor(totalSeconds / 3600);\n const minute = Math.floor((totalSeconds - 3600 * hour) / 60);\n const second = totalSeconds - 3600 * hour - 60 * minute;\n return { hour, minute, second, totalSeconds };\n}\n\n// start and end are in milliseconds.\nfunction durationBetween(start: number, end: number): Duration {\n const durationInMillisec = start - end;\n const totalSeconds = Math.floor(durationInMillisec / 1000);\n return durationFromSeconds(totalSeconds);\n}\n\nexport function stringifyDuration(d: Duration): string {\n if (d.hour > 24) {\n const n = Math.floor(d.hour / 24);\n return n + (n === 1 ? \" day\" : \" days\");\n }\n return (\n (d.hour !== 0 ? `${d.hour}h` : \"\") +\n (d.minute !== 0 ? `${d.minute}m` : \"\") +\n `${d.second}s`\n );\n}\n\nexport function durationBefore(timestamp: string): string {\n try {\n const duration = durationBetween(Date.parse(timestamp), Date.now());\n if (duration.totalSeconds < 1) {\n return \"now\";\n }\n return \"in \" + stringifyDuration(duration);\n } catch {\n return \"-\";\n }\n}\n\nconst zeroTimestamp = \"0001-01-01T00:00:00Z\";\nexport function timeAgo(timestamp: string): string {\n if (timestamp === zeroTimestamp) {\n return \"-\";\n }\n try {\n return timeAgoUnix(Date.parse(timestamp) / 1000);\n } catch (error) {\n console.error(\"Could not parse timestamp: \", timestamp, error);\n return \"-\";\n }\n}\n\nexport function timeAgoUnix(unixtime: number): string {\n if (unixtime === 0) {\n return \"\";\n }\n const duration = durationBetween(Date.now(), unixtime * 1000);\n return stringifyDuration(duration) + \" ago\";\n}\n\nexport function getCurrentUTCDate(): string {\n const today = new Date();\n const dd = today.getUTCDate().toString().padStart(2, \"0\");\n const mm = (today.getMonth() + 1).toString().padStart(2, \"0\");\n const yyyy = today.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n}\n\nexport function uuidPrefix(uuid: string): string {\n const idx = uuid.indexOf(\"-\");\n if (idx === -1) {\n return uuid;\n }\n return uuid.substr(0, idx);\n}\n\nexport function percentage(numerator: number, denominator: number): string {\n if (denominator === 0) return \"0.00%\";\n const perc = ((numerator / denominator) * 100).toFixed(2);\n return `${perc} %`;\n}\n\nexport function isJsonPayload(p: string) {\n try {\n JSON.parse(p);\n } catch (error) {\n return false;\n }\n return true;\n}\n\nexport function prettifyPayload(p: string) {\n if (isJsonPayload(p)) {\n return JSON.stringify(JSON.parse(p), null, 2);\n }\n return p;\n}\n\n// Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC.\nexport function currentUnixtime(): number {\n return Math.floor(Date.now() / 1000);\n}\n\nconst durationRegex = /([0-9]*(\\.[0-9]*)?)[s|m|h]/;\n// Parses the given string and returns the number of seconds if the input is valid.\n// Otherwise, it throws an error\n// Supported time units are \"s\", \"m\", \"h\"\nexport function parseDuration(s: string): number {\n if (!durationRegex.test(s)) {\n throw new Error(\"invalid duration\");\n }\n const val = parseFloat(s.slice(0, -1));\n switch (s.slice(-1)) {\n case \"s\":\n return val;\n case \"m\":\n return val * 60;\n case \"h\":\n return val * 60 * 60;\n default:\n throw new Error(\"invalid duration unit\");\n }\n}\n","import { Dispatch } from \"redux\";\nimport {\n deleteQueue,\n listQueues,\n ListQueuesResponse,\n pauseQueue,\n resumeQueue,\n} from \"../api\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\n// List of queue related action types.\nexport const LIST_QUEUES_BEGIN = \"LIST_QUEUES_BEGIN\";\nexport const LIST_QUEUES_SUCCESS = \"LIST_QUEUES_SUCCESS\";\nexport const LIST_QUEUES_ERROR = \"LIST_QUEUES_ERROR\";\nexport const DELETE_QUEUE_BEGIN = \"DELETE_QUEUE_BEGIN\";\nexport const DELETE_QUEUE_SUCCESS = \"DELETE_QUEUE_SUCCESS\";\nexport const DELETE_QUEUE_ERROR = \"DELETE_QUEUE_ERROR\";\nexport const PAUSE_QUEUE_BEGIN = \"PAUSE_QUEUE_BEGIN\";\nexport const PAUSE_QUEUE_SUCCESS = \"PAUSE_QUEUE_SUCCESS\";\nexport const PAUSE_QUEUE_ERROR = \"PAUSE_QUEUE_ERROR\";\nexport const RESUME_QUEUE_BEGIN = \"RESUME_QUEUE_BEGIN\";\nexport const RESUME_QUEUE_SUCCESS = \"RESUME_QUEUE_SUCCESS\";\nexport const RESUME_QUEUE_ERROR = \"RESUME_QUEUE_ERROR\";\n\ninterface ListQueuesBeginAction {\n type: typeof LIST_QUEUES_BEGIN;\n}\n\ninterface ListQueuesSuccessAction {\n type: typeof LIST_QUEUES_SUCCESS;\n payload: ListQueuesResponse;\n}\n\ninterface ListQueuesErrorAction {\n type: typeof LIST_QUEUES_ERROR;\n error: string;\n}\n\ninterface DeleteQueueBeginAction {\n type: typeof DELETE_QUEUE_BEGIN;\n queue: string; // name of the queue\n}\n\ninterface DeleteQueueSuccessAction {\n type: typeof DELETE_QUEUE_SUCCESS;\n queue: string; // name of the queue\n}\n\ninterface DeleteQueueErrorAction {\n type: typeof DELETE_QUEUE_ERROR;\n queue: string; // name of the queue\n error: string; // error description\n}\n\ninterface PauseQueueBeginAction {\n type: typeof PAUSE_QUEUE_BEGIN;\n queue: string; // name of the queue\n}\n\ninterface PauseQueueSuccessAction {\n type: typeof PAUSE_QUEUE_SUCCESS;\n queue: string; // name of the queue\n}\n\ninterface PauseQueueErrorAction {\n type: typeof PAUSE_QUEUE_ERROR;\n queue: string; // name of the queue\n error: string; // error description\n}\n\ninterface ResumeQueueBeginAction {\n type: typeof RESUME_QUEUE_BEGIN;\n queue: string; // name of the queue\n}\n\ninterface ResumeQueueSuccessAction {\n type: typeof RESUME_QUEUE_SUCCESS;\n queue: string; // name of the queue\n}\n\ninterface ResumeQueueErrorAction {\n type: typeof RESUME_QUEUE_ERROR;\n queue: string; // name of the queue\n error: string; // error description\n}\n\n// Union of all queues related action types.\nexport type QueuesActionTypes =\n | ListQueuesBeginAction\n | ListQueuesSuccessAction\n | ListQueuesErrorAction\n | DeleteQueueBeginAction\n | DeleteQueueSuccessAction\n | DeleteQueueErrorAction\n | PauseQueueBeginAction\n | PauseQueueSuccessAction\n | PauseQueueErrorAction\n | ResumeQueueBeginAction\n | ResumeQueueSuccessAction\n | ResumeQueueErrorAction;\n\nexport function listQueuesAsync() {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_QUEUES_BEGIN });\n try {\n const response = await listQueues();\n dispatch({\n type: LIST_QUEUES_SUCCESS,\n payload: response,\n });\n } catch (error) {\n console.error(`listQueuesAsync: ${toErrorStringWithHttpStatus(error)}`);\n dispatch({\n type: LIST_QUEUES_ERROR,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function deleteQueueAsync(qname: string) {\n return async (dispatch: Dispatch) => {\n dispatch({\n type: DELETE_QUEUE_BEGIN,\n queue: qname,\n });\n try {\n await deleteQueue(qname);\n // FIXME: this action doesn't get dispatched when server stalls\n dispatch({\n type: DELETE_QUEUE_SUCCESS,\n queue: qname,\n });\n } catch (error) {\n console.error(error);\n dispatch({\n type: DELETE_QUEUE_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function pauseQueueAsync(qname: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: PAUSE_QUEUE_BEGIN, queue: qname });\n try {\n await pauseQueue(qname);\n dispatch({ type: PAUSE_QUEUE_SUCCESS, queue: qname });\n } catch (error) {\n console.error(\"pauseQueueAsynq: \", toErrorStringWithHttpStatus(error));\n dispatch({\n type: PAUSE_QUEUE_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function resumeQueueAsync(qname: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RESUME_QUEUE_BEGIN, queue: qname });\n try {\n await resumeQueue(qname);\n dispatch({ type: RESUME_QUEUE_SUCCESS, queue: qname });\n } catch (error) {\n console.error(\"resumeQueueAsync: \", toErrorStringWithHttpStatus(error));\n dispatch({\n type: RESUME_QUEUE_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n","import { Dispatch } from \"redux\";\nimport { listQueueStats, ListQueueStatsResponse } from \"../api\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\nexport const LIST_QUEUE_STATS_BEGIN = \"LIST_QUEUE_STATS_BEGIN\";\nexport const LIST_QUEUE_STATS_SUCCESS = \"LIST_QUEUE_STATS_SUCCESS\";\nexport const LIST_QUEUE_STATS_ERROR = \"LIST_QUEUE_STATS_ERROR\";\n\ninterface ListQueueStatsBeginAction {\n type: typeof LIST_QUEUE_STATS_BEGIN;\n}\n\ninterface ListQueueStatsSuccessAction {\n type: typeof LIST_QUEUE_STATS_SUCCESS;\n payload: ListQueueStatsResponse;\n}\n\ninterface ListQueueStatsErrorAction {\n type: typeof LIST_QUEUE_STATS_ERROR;\n error: string;\n}\n\n// Union of all queue stats related action types.\nexport type QueueStatsActionTypes =\n | ListQueueStatsBeginAction\n | ListQueueStatsSuccessAction\n | ListQueueStatsErrorAction;\n\nexport function listQueueStatsAsync() {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_QUEUE_STATS_BEGIN });\n try {\n const response = await listQueueStats();\n dispatch({\n type: LIST_QUEUE_STATS_SUCCESS,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listQueueStatsAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_QUEUE_STATS_ERROR,\n error: toErrorString(error),\n });\n }\n };\n}\n","import React from \"react\";\nimport {\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTheme } from \"@material-ui/core/styles\";\nimport { queueDetailsPath } from \"../paths\";\n\ninterface Props {\n data: TaskBreakdown[];\n}\n\ninterface TaskBreakdown {\n queue: string; // name of the queue.\n active: number; // number of active tasks in the queue.\n pending: number; // number of pending tasks in the queue.\n aggregating: number; // number of aggregating tasks in the queue.\n scheduled: number; // number of scheduled tasks in the queue.\n retry: number; // number of retry tasks in the queue.\n archived: number; // number of archived tasks in the queue.\n completed: number; // number of completed tasks in the queue.\n}\n\nfunction QueueSizeChart(props: Props) {\n const theme = useTheme();\n const handleClick = (params: { activeLabel?: string } | null) => {\n const allQueues = props.data.map((b) => b.queue);\n if (\n params &&\n params.activeLabel &&\n allQueues.includes(params.activeLabel)\n ) {\n history.push(queueDetailsPath(params.activeLabel));\n }\n };\n const history = useHistory();\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default QueueSizeChart;\n","import React from \"react\";\nimport {\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useTheme, Theme } from \"@material-ui/core/styles\";\n\ninterface Props {\n data: ProcessedStats[];\n}\n\ninterface ProcessedStats {\n queue: string; // name of the queue.\n succeeded: number; // number of tasks succeeded.\n failed: number; // number of tasks failed.\n}\n\nfunction ProcessedTasksChart(props: Props) {\n const theme = useTheme();\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default ProcessedTasksChart;\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport { Queue } from \"../api\";\nimport { AppState } from \"../store\";\nimport { deleteQueueAsync } from \"../actions/queuesActions\";\n\ninterface Props {\n queue: Queue | null; // queue to delete\n onClose: () => void;\n}\n\nfunction mapStateToProps(state: AppState, ownProps: Props) {\n let requestPending = false;\n if (ownProps.queue !== null) {\n const q = state.queues.data.find((q) => q.name === ownProps.queue?.queue);\n if (q !== undefined) {\n requestPending = q.requestPending;\n }\n }\n return {\n requestPending,\n };\n}\n\nconst connector = connect(mapStateToProps, { deleteQueueAsync });\n\ntype ReduxProps = ConnectedProps;\n\nfunction DeleteQueueConfirmationDialog(props: Props & ReduxProps) {\n const handleDeleteClick = () => {\n if (!props.queue) {\n return;\n }\n props.deleteQueueAsync(props.queue.queue);\n props.onClose();\n };\n return (\n \n {props.queue !== null &&\n (props.queue.size > 0 ? (\n <>\n \n Queue is not empty\n \n \n \n You are trying to delete a non-emtpy queue \"{props.queue.queue}\n \". Please empty the queue first before deleting.\n \n \n \n \n \n \n ) : (\n <>\n \n Are you sure you want to delete \"{props.queue.queue}\"?\n \n \n \n You can't undo this action.\n \n \n \n \n Cancel\n \n \n Delete\n \n \n \n ))}\n \n );\n}\n\nexport default connector(DeleteQueueConfirmationDialog);\n","// SortDirection describes the direction of sort.\nexport enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\",\n}\n\n// TableColumn is a config for a table column.\nexport interface TableColumn {\n key: string;\n label: string;\n align: \"left\" | \"right\" | \"center\";\n}\n\n// SortableTableColumn is a config for a table column\n// for table with sorting support.\n//\n// T is the enum of sort keys.\nexport interface SortableTableColumn extends TableColumn {\n sortBy: T;\n}\n","import React, { useState } from \"react\";\nimport clsx from \"clsx\";\nimport { Link } from \"react-router-dom\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableSortLabel from \"@material-ui/core/TableSortLabel\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport PauseCircleFilledIcon from \"@material-ui/icons/PauseCircleFilled\";\nimport PlayCircleFilledIcon from \"@material-ui/icons/PlayCircleFilled\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport DeleteQueueConfirmationDialog from \"./DeleteQueueConfirmationDialog\";\nimport { Queue } from \"../api\";\nimport { queueDetailsPath } from \"../paths\";\nimport { SortDirection, SortableTableColumn } from \"../types/table\";\nimport prettyBytes from \"pretty-bytes\";\nimport { percentage } from \"../utils\";\n\nconst useStyles = makeStyles((theme) => ({\n table: {\n minWidth: 650,\n },\n fixedCell: {\n position: \"sticky\",\n zIndex: 1,\n left: 0,\n background: theme.palette.background.paper,\n },\n}));\n\ninterface QueueWithMetadata extends Queue {\n requestPending: boolean; // indicates pause/resume/delete request is pending for the queue.\n}\n\ninterface Props {\n queues: QueueWithMetadata[];\n onPauseClick: (qname: string) => Promise;\n onResumeClick: (qname: string) => Promise;\n onDeleteClick: (qname: string) => Promise;\n}\n\nenum SortBy {\n Queue,\n State,\n Size,\n MemoryUsage,\n Latency,\n Processed,\n Failed,\n ErrorRate,\n\n None, // no sort support\n}\n\nconst colConfigs: SortableTableColumn[] = [\n { label: \"Queue\", key: \"queue\", sortBy: SortBy.Queue, align: \"left\" },\n { label: \"State\", key: \"state\", sortBy: SortBy.State, align: \"left\" },\n {\n label: \"Size\",\n key: \"size\",\n sortBy: SortBy.Size,\n align: \"right\",\n },\n {\n label: \"Memory usage\",\n key: \"memory_usage\",\n sortBy: SortBy.MemoryUsage,\n align: \"right\",\n },\n {\n label: \"Latency\",\n key: \"latency\",\n sortBy: SortBy.Latency,\n align: \"right\",\n },\n {\n label: \"Processed\",\n key: \"processed\",\n sortBy: SortBy.Processed,\n align: \"right\",\n },\n { label: \"Failed\", key: \"failed\", sortBy: SortBy.Failed, align: \"right\" },\n {\n label: \"Error rate\",\n key: \"error_rate\",\n sortBy: SortBy.ErrorRate,\n align: \"right\",\n },\n { label: \"Actions\", key: \"actions\", sortBy: SortBy.None, align: \"center\" },\n];\n\n// sortQueues takes a array of queues and return a sorted array.\n// It returns a new array and leave the original array untouched.\nfunction sortQueues(\n queues: QueueWithMetadata[],\n cmpFn: (first: QueueWithMetadata, second: QueueWithMetadata) => number\n): QueueWithMetadata[] {\n let copy = [...queues];\n copy.sort(cmpFn);\n return copy;\n}\n\nexport default function QueuesOverviewTable(props: Props) {\n const classes = useStyles();\n const [sortBy, setSortBy] = useState(SortBy.Queue);\n const [sortDir, setSortDir] = useState(SortDirection.Asc);\n const [queueToDelete, setQueueToDelete] = useState(\n null\n );\n const createSortClickHandler = (sortKey: SortBy) => (e: React.MouseEvent) => {\n if (sortKey === sortBy) {\n // Toggle sort direction.\n const nextSortDir =\n sortDir === SortDirection.Asc ? SortDirection.Desc : SortDirection.Asc;\n setSortDir(nextSortDir);\n } else {\n // Change the sort key.\n setSortBy(sortKey);\n }\n };\n\n const cmpFunc = (q1: QueueWithMetadata, q2: QueueWithMetadata): number => {\n let isQ1Smaller: boolean;\n switch (sortBy) {\n case SortBy.Queue:\n if (q1.queue === q2.queue) return 0;\n isQ1Smaller = q1.queue < q2.queue;\n break;\n case SortBy.State:\n if (q1.paused === q2.paused) return 0;\n isQ1Smaller = !q1.paused;\n break;\n case SortBy.Size:\n if (q1.size === q2.size) return 0;\n isQ1Smaller = q1.size < q2.size;\n break;\n case SortBy.MemoryUsage:\n if (q1.memory_usage_bytes === q2.memory_usage_bytes) return 0;\n isQ1Smaller = q1.memory_usage_bytes < q2.memory_usage_bytes;\n break;\n case SortBy.Latency:\n if (q1.latency_msec === q2.latency_msec) return 0;\n isQ1Smaller = q1.latency_msec < q2.latency_msec;\n break;\n case SortBy.Processed:\n if (q1.processed === q2.processed) return 0;\n isQ1Smaller = q1.processed < q2.processed;\n break;\n case SortBy.Failed:\n if (q1.failed === q2.failed) return 0;\n isQ1Smaller = q1.failed < q2.failed;\n break;\n case SortBy.ErrorRate:\n const q1ErrorRate = q1.failed / q1.processed;\n const q2ErrorRate = q2.failed / q2.processed;\n if (q1ErrorRate === q2ErrorRate) return 0;\n isQ1Smaller = q1ErrorRate < q2ErrorRate;\n break;\n default:\n // eslint-disable-next-line no-throw-literal\n throw `Unexpected order by value: ${sortBy}`;\n }\n if (sortDir === SortDirection.Asc) {\n return isQ1Smaller ? -1 : 1;\n } else {\n return isQ1Smaller ? 1 : -1;\n }\n };\n\n const handleDialogClose = () => {\n setQueueToDelete(null);\n };\n\n return (\n \n \n \n \n \n {colConfigs\n .filter((cfg) => {\n // Filter out actions column in readonly mode.\n return !window.READ_ONLY || cfg.key !== \"actions\";\n })\n .map((cfg, i) => (\n \n {cfg.sortBy !== SortBy.None ? (\n \n {cfg.label}\n \n ) : (\n
{cfg.label}
\n )}\n \n ))}\n
\n
\n \n {sortQueues(props.queues, cmpFunc).map((q) => (\n props.onPauseClick(q.queue)}\n onResumeClick={() => props.onResumeClick(q.queue)}\n onDeleteClick={() => setQueueToDelete(q)}\n />\n ))}\n \n
\n
\n \n
\n );\n}\n\nconst useRowStyles = makeStyles((theme) => ({\n row: {\n \"&:last-child td\": {\n borderBottomWidth: 0,\n },\n \"&:last-child th\": {\n borderBottomWidth: 0,\n },\n },\n linkText: {\n textDecoration: \"none\",\n color: theme.palette.text.primary,\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n textGreen: {\n color: theme.palette.success.dark,\n },\n textRed: {\n color: theme.palette.error.dark,\n },\n boldCell: {\n fontWeight: 600,\n },\n fixedCell: {\n position: \"sticky\",\n zIndex: 1,\n left: 0,\n background: theme.palette.background.paper,\n },\n actionIconsContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n minWidth: \"100px\",\n },\n}));\n\ninterface RowProps {\n queue: QueueWithMetadata;\n onPauseClick: () => void;\n onResumeClick: () => void;\n onDeleteClick: () => void;\n}\n\nfunction Row(props: RowProps) {\n const classes = useRowStyles();\n const { queue: q } = props;\n const [showIcons, setShowIcons] = useState(false);\n return (\n \n \n \n {q.queue}\n \n \n \n {q.paused ? (\n paused\n ) : (\n run\n )}\n \n {q.size}\n {prettyBytes(q.memory_usage_bytes)}\n {q.display_latency}\n {q.processed}\n {q.failed}\n {percentage(q.failed, q.processed)}\n {!window.READ_ONLY && (\n setShowIcons(true)}\n onMouseLeave={() => setShowIcons(false)}\n >\n
\n {showIcons ? (\n \n {q.paused ? (\n \n \n \n \n \n ) : (\n \n \n \n \n \n )}\n \n \n \n \n \n \n ) : (\n \n \n \n )}\n
\n \n )}\n
\n );\n}\n","import { Theme, withStyles } from \"@material-ui/core/styles\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\n\n// Export custom style tooltip.\nexport default withStyles((theme: Theme) => ({\n tooltip: {\n backgroundColor: \"#f5f5f9\",\n color: \"rgba(0, 0, 0, 0.87)\",\n maxWidth: 400,\n fontSize: theme.typography.pxToRem(12),\n border: \"1px solid #dadde9\",\n },\n}))(Tooltip);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport ButtonGroup from \"@material-ui/core/ButtonGroup\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport ClickAwayListener from \"@material-ui/core/ClickAwayListener\";\nimport Grow from \"@material-ui/core/Grow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Popper from \"@material-ui/core/Popper\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport MenuList from \"@material-ui/core/MenuList\";\nimport { isDarkTheme } from \"../theme\";\n\ninterface Option {\n label: string;\n key: string;\n}\n\ninterface Props {\n options: Option[];\n initialSelectedKey: string;\n onSelect: (key: string) => void;\n}\n\nconst useStyles = makeStyles((theme) => ({\n popper: {\n zIndex: 2,\n },\n buttonContained: {\n backgroundColor: isDarkTheme(theme)\n ? \"#303030\"\n : theme.palette.background.default,\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: theme.palette.action.hover,\n },\n },\n}));\n\nexport default function SplitButton(props: Props) {\n const classes = useStyles();\n const [open, setOpen] = React.useState(false);\n const anchorRef = React.useRef(null);\n const [selectedKey, setSelectedKey] = React.useState(\n props.initialSelectedKey\n );\n\n const handleMenuItemClick = (\n event: React.MouseEvent,\n key: string\n ) => {\n setSelectedKey(key);\n setOpen(false);\n props.onSelect(key);\n };\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event: React.MouseEvent) => {\n if (\n anchorRef.current &&\n anchorRef.current.contains(event.target as HTMLElement)\n ) {\n return;\n }\n setOpen(false);\n };\n\n const selectedOpt = props.options.find((opt) => opt.key === selectedKey);\n\n return (\n <>\n \n \n \n \n \n \n \n {({ TransitionProps, placement }) => (\n \n \n \n \n {props.options.map((opt) => (\n handleMenuItemClick(event, opt.key)}\n >\n {opt.label}\n \n ))}\n \n \n \n \n )}\n \n \n );\n}\n","import { useEffect, useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\n// usePolling repeatedly calls doFn with a fix time delay specified\n// by interval (in millisecond).\nexport function usePolling(doFn: () => void, interval: number) {\n useEffect(() => {\n doFn();\n const id = setInterval(doFn, interval * 1000);\n return () => clearInterval(id);\n }, [interval, doFn]);\n}\n\n// useQuery gets the URL search params from the current URL.\nexport function useQuery(): URLSearchParams {\n const { search } = useLocation();\n return useMemo(() => new URLSearchParams(search), [search]);\n}\n","import React from \"react\";\nimport {\n LineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useTheme, Theme } from \"@material-ui/core/styles\";\nimport { DailyStat } from \"../api\";\n\ninterface Props {\n data: { [qname: string]: DailyStat[] };\n numDays: number;\n}\n\ninterface ChartData {\n succeeded: number;\n failed: number;\n date: string;\n}\n\nexport default function DailyStatsChart(props: Props) {\n const data = makeChartData(props.data, props.numDays);\n const theme = useTheme();\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nfunction makeChartData(\n queueStats: { [qname: string]: DailyStat[] },\n numDays: number\n): ChartData[] {\n const dataByDate: { [date: string]: ChartData } = {};\n for (const qname in queueStats) {\n for (const stat of queueStats[qname]) {\n if (!dataByDate.hasOwnProperty(stat.date)) {\n dataByDate[stat.date] = { succeeded: 0, failed: 0, date: stat.date };\n }\n dataByDate[stat.date].succeeded += stat.processed - stat.failed;\n dataByDate[stat.date].failed += stat.failed;\n }\n }\n return Object.values(dataByDate).sort(sortByDate).slice(-numDays);\n}\n\nfunction sortByDate(x: ChartData, y: ChartData): number {\n return Date.parse(x.date) - Date.parse(y.date);\n}\n","import React, { useEffect } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport Container from \"@material-ui/core/Container\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport {\n listQueuesAsync,\n pauseQueueAsync,\n resumeQueueAsync,\n deleteQueueAsync,\n} from \"../actions/queuesActions\";\nimport { listQueueStatsAsync } from \"../actions/queueStatsActions\";\nimport { dailyStatsKeyChange } from \"../actions/settingsActions\";\nimport { AppState } from \"../store\";\nimport QueueSizeChart from \"../components/QueueSizeChart\";\nimport ProcessedTasksChart from \"../components/ProcessedTasksChart\";\nimport QueuesOverviewTable from \"../components/QueuesOverviewTable\";\nimport Tooltip from \"../components/Tooltip\";\nimport SplitButton from \"../components/SplitButton\";\nimport { usePolling } from \"../hooks\";\nimport DailyStatsChart from \"../components/DailyStatsChart\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n chartHeader: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: theme.spacing(2),\n },\n chartHeaderTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n chartContainer: {\n width: \"100%\",\n height: \"300px\",\n },\n infoIcon: {\n marginLeft: theme.spacing(1),\n color: theme.palette.grey[500],\n cursor: \"pointer\",\n },\n tooltipSection: {\n marginBottom: \"4px\",\n },\n tableContainer: {\n marginBottom: theme.spacing(2),\n },\n}));\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.queues.loading,\n queues: state.queues.data.map((q) => ({\n ...q.currentStats,\n requestPending: q.requestPending,\n })),\n error: state.queues.error,\n pollInterval: state.settings.pollInterval,\n queueStats: state.queueStats.data,\n dailyStatsKey: state.settings.dailyStatsChartType,\n };\n}\n\nconst mapDispatchToProps = {\n listQueuesAsync,\n pauseQueueAsync,\n resumeQueueAsync,\n deleteQueueAsync,\n listQueueStatsAsync,\n dailyStatsKeyChange,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype Props = ConnectedProps;\n\nexport type DailyStatsKey = \"today\" | \"last-7d\" | \"last-30d\" | \"last-90d\";\nexport const defaultDailyStatsKey = \"last-7d\";\n\nfunction DashboardView(props: Props) {\n const {\n pollInterval,\n listQueuesAsync,\n queues,\n listQueueStatsAsync,\n dailyStatsKey,\n } = props;\n const classes = useStyles();\n\n usePolling(listQueuesAsync, pollInterval);\n\n // Refetch queue stats if a queue is added or deleted.\n const qnames = queues\n .map((q) => q.queue)\n .sort()\n .join(\",\");\n\n useEffect(() => {\n listQueueStatsAsync();\n }, [listQueueStatsAsync, qnames]);\n\n const processedStats = queues.map((q) => ({\n queue: q.queue,\n succeeded: q.processed - q.failed,\n failed: q.failed,\n }));\n\n return (\n \n \n {props.error.length > 0 && (\n \n \n Error\n Could not retrieve queues live data —{\" \"}\n See the logs for details\n \n \n )}\n \n \n
\n
\n Queue Size\n \n
\n Total number of tasks in the queue\n
\n
\n Active: number of tasks currently being\n processed\n
\n
\n Pending: number of tasks ready to be\n processed\n
\n
\n Scheduled: number of tasks scheduled to\n be processed in the future\n
\n
\n Retry: number of tasks scheduled to be\n retried in the future\n
\n
\n Archived: number of tasks exhausted\n their retries\n
\n
\n }\n >\n \n \n
\n \n
\n \n
\n
\n
\n\n \n \n
\n
\n Tasks Processed\n \n
\n Total number of tasks processed in a given day (UTC)\n
\n
\n Succeeded: number of tasks successfully\n processed\n
\n
\n Failed: number of tasks failed to be\n processed\n
\n
\n }\n >\n \n \n
\n
\n \n props.dailyStatsKeyChange(key as DailyStatsKey)\n }\n />\n
\n \n
\n {dailyStatsKey === \"today\" && (\n \n )}\n {dailyStatsKey === \"last-7d\" && (\n \n )}\n {dailyStatsKey === \"last-30d\" && (\n \n )}\n {dailyStatsKey === \"last-90d\" && (\n \n )}\n
\n
\n
\n\n \n \n {/* TODO: Add loading indicator */}\n \n \n \n
\n
\n );\n}\n\nexport default connector(DashboardView);\n","import {\n DAILY_STATS_KEY_CHANGE,\n POLL_INTERVAL_CHANGE,\n SettingsActionTypes,\n TASK_ROWS_PER_PAGE_CHANGE,\n THEME_PREFERENCE_CHANGE,\n TOGGLE_DRAWER,\n} from \"../actions/settingsActions\";\nimport { defaultPageSize } from \"../components/TablePaginationActions\"\nimport { DailyStatsKey, defaultDailyStatsKey } from \"../views/DashboardView\";\n\nexport enum ThemePreference {\n SystemDefault,\n Always,\n Never,\n}\n\nexport interface SettingsState {\n // Time duration between data refresh.\n pollInterval: number;\n\n // UI theme setting.\n themePreference: ThemePreference;\n\n // Whether the drawer (i.e. sidebar) is open or not.\n isDrawerOpen: boolean;\n\n // Number of tasks displayed in task table.\n taskRowsPerPage: number,\n\n // Type of the chart displayed for \"Processed Tasks\" section in dashboard.\n dailyStatsChartType: DailyStatsKey;\n}\n\nexport const initialState: SettingsState = {\n pollInterval: 8,\n themePreference: ThemePreference.SystemDefault,\n isDrawerOpen: true,\n taskRowsPerPage: defaultPageSize,\n dailyStatsChartType: defaultDailyStatsKey,\n};\n\nfunction settingsReducer(\n state = initialState,\n action: SettingsActionTypes\n): SettingsState {\n switch (action.type) {\n case POLL_INTERVAL_CHANGE:\n return {\n ...state,\n pollInterval: action.value,\n };\n\n case THEME_PREFERENCE_CHANGE:\n return {\n ...state,\n themePreference: action.value,\n };\n\n case TOGGLE_DRAWER:\n return {\n ...state,\n isDrawerOpen: !state.isDrawerOpen,\n };\n\n case TASK_ROWS_PER_PAGE_CHANGE:\n return {\n ...state,\n taskRowsPerPage: action.value,\n }\n\n case DAILY_STATS_KEY_CHANGE:\n return {\n ...state,\n dailyStatsChartType: action.value,\n }\n\n default:\n return state;\n }\n}\n\nexport default settingsReducer;\n","import { createTheme, Theme } from \"@material-ui/core/styles\";\nimport { ThemePreference } from \"./reducers/settingsReducer\";\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\n\nexport function useTheme(themePreference: ThemePreference): Theme {\n let prefersDarkMode = useMediaQuery(\"(prefers-color-scheme: dark)\");\n if (themePreference === ThemePreference.Always) {\n prefersDarkMode = true;\n } else if (themePreference === ThemePreference.Never) {\n prefersDarkMode = false;\n }\n return createTheme({\n // Got color palette from https://htmlcolors.com/palette/31/stripe\n palette: {\n primary: {\n main: \"#4379FF\",\n },\n secondary: {\n main: \"#97FBD1\",\n },\n background: {\n default: \"#f5f7f9\",\n },\n type: prefersDarkMode ? \"dark\" : \"light\",\n },\n });\n}\n\nexport function isDarkTheme(theme: Theme): boolean {\n return theme.palette.type === \"dark\";\n}\n","export const CLOSE_SNACKBAR = \"CLOSE_SNACKBAR\";\n\ninterface CloseSnakbarAction {\n type: typeof CLOSE_SNACKBAR;\n}\n\n// Union of all snackbar related action types\nexport type SnackbarActionTypes = CloseSnakbarAction;\n\nexport function closeSnackbar() {\n return { type: CLOSE_SNACKBAR };\n}\n","import React, { ReactElement } from \"react\";\nimport clsx from \"clsx\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n useRouteMatch,\n Link as RouterLink,\n LinkProps as RouterLinkProps,\n} from \"react-router-dom\";\nimport { isDarkTheme } from \"../theme\";\n\nconst useStyles = makeStyles((theme) => ({\n listItem: {\n borderTopRightRadius: \"24px\",\n borderBottomRightRadius: \"24px\",\n },\n selected: {\n backgroundColor: isDarkTheme(theme)\n ? `${theme.palette.secondary.main}30`\n : `${theme.palette.primary.main}30`,\n },\n selectedText: {\n fontWeight: 600,\n color: isDarkTheme(theme)\n ? theme.palette.secondary.main\n : theme.palette.primary.main,\n },\n selectedIcon: {\n color: isDarkTheme(theme)\n ? theme.palette.secondary.main\n : theme.palette.primary.main,\n },\n}));\n\ninterface Props {\n to: string;\n primary: string;\n icon?: ReactElement;\n}\n\n// Note: See https://material-ui.com/guides/composition/ for details.\nfunction ListItemLink(props: Props): ReactElement {\n const classes = useStyles();\n const { icon, primary, to } = props;\n const isMatch = useRouteMatch({\n path: to,\n strict: true,\n sensitive: true,\n exact: true,\n });\n const renderLink = React.useMemo(\n () =>\n React.forwardRef>((itemProps, ref) => (\n \n )),\n [to]\n );\n return (\n
  • \n \n \n {icon && (\n \n {icon}\n \n )}\n \n \n \n
  • \n );\n}\n\nexport default ListItemLink;\n","import React from \"react\";\nimport { useTheme, Theme } from \"@material-ui/core/styles\";\nimport { Light as ReactSyntaxHighlighter } from \"react-syntax-highlighter\";\nimport json from \"react-syntax-highlighter/dist/esm/languages/hljs/json\";\nimport styleDark from \"react-syntax-highlighter/dist/esm/styles/hljs/atom-one-dark\";\nimport styleLight from \"react-syntax-highlighter/dist/esm/styles/hljs/atom-one-light\";\nimport { isDarkTheme } from \"../theme\";\n\ninterface Props {\n language: string;\n children: string;\n customStyle?: object;\n}\n\nReactSyntaxHighlighter.registerLanguage(\"json\", json);\n\n// Theme aware syntax-highlighter component.\nexport default function SyntaxHighlighter(props: Props) {\n const theme = useTheme();\n const style = isDarkTheme(theme) ? styleDark : styleLight;\n return (\n \n {props.children}\n \n );\n}\n","import { Dispatch } from \"@reduxjs/toolkit\";\nimport {\n listSchedulerEnqueueEvents,\n ListSchedulerEnqueueEventsResponse,\n listSchedulerEntries,\n ListSchedulerEntriesResponse,\n} from \"../api\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\n// List of scheduler-entry related action types.\nexport const LIST_SCHEDULER_ENTRIES_BEGIN = \"LIST_SCHEDULER_ENTRIES_BEGIN\";\nexport const LIST_SCHEDULER_ENTRIES_SUCCESS = \"LIST_SCHEDULER_ENTRIES_SUCCESS\";\nexport const LIST_SCHEDULER_ENTRIES_ERROR = \"LIST_SCHEDULER_ENTRIES_ERROR\";\nexport const LIST_SCHEDULER_ENQUEUE_EVENTS_BEGIN =\n \"LIST_SCHEDULER_ENQUEUE_EVENTS_BEGIN\";\nexport const LIST_SCHEDULER_ENQUEUE_EVENTS_SUCCESS =\n \"LIST_SCHEDULER_ENQUEUE_EVENTS_SUCCESS\";\nexport const LIST_SCHEDULER_ENQUEUE_EVENTS_ERROR =\n \"LIST_SCHEDULER_ENQUEUE_EVENTS_ERROR\";\n\ninterface ListSchedulerEntriesBeginAction {\n type: typeof LIST_SCHEDULER_ENTRIES_BEGIN;\n}\n\ninterface ListSchedulerEntriesSuccessAction {\n type: typeof LIST_SCHEDULER_ENTRIES_SUCCESS;\n payload: ListSchedulerEntriesResponse;\n}\n\ninterface ListSchedulerEntriesErrorAction {\n type: typeof LIST_SCHEDULER_ENTRIES_ERROR;\n error: string; // error description\n}\n\ninterface ListSchedulerEnqueueEventBeginAction {\n type: typeof LIST_SCHEDULER_ENQUEUE_EVENTS_BEGIN;\n entryId: string;\n}\n\ninterface ListSchedulerEnqueueEventSuccessAction {\n type: typeof LIST_SCHEDULER_ENQUEUE_EVENTS_SUCCESS;\n entryId: string;\n payload: ListSchedulerEnqueueEventsResponse;\n}\n\ninterface ListSchedulerEnqueueEventErrorAction {\n type: typeof LIST_SCHEDULER_ENQUEUE_EVENTS_ERROR;\n entryId: string;\n error: string;\n}\n\n// Union of all scheduler-entry related actions.\nexport type SchedulerEntriesActionTypes =\n | ListSchedulerEntriesBeginAction\n | ListSchedulerEntriesSuccessAction\n | ListSchedulerEntriesErrorAction\n | ListSchedulerEnqueueEventBeginAction\n | ListSchedulerEnqueueEventSuccessAction\n | ListSchedulerEnqueueEventErrorAction;\n\nexport function listSchedulerEntriesAsync() {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_SCHEDULER_ENTRIES_BEGIN });\n try {\n const response = await listSchedulerEntries();\n dispatch({\n type: LIST_SCHEDULER_ENTRIES_SUCCESS,\n payload: response,\n });\n } catch (error) {\n console.error(\n `listSchedulerEnqueueEventsAsync: ${toErrorStringWithHttpStatus(error)}`\n );\n dispatch({\n type: LIST_SCHEDULER_ENTRIES_ERROR,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listSchedulerEnqueueEventsAsync(entryId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_SCHEDULER_ENQUEUE_EVENTS_BEGIN, entryId });\n try {\n const response = await listSchedulerEnqueueEvents(entryId);\n dispatch({\n type: LIST_SCHEDULER_ENQUEUE_EVENTS_SUCCESS,\n payload: response,\n entryId,\n });\n } catch (error) {\n console.error(\n \"listSchedulerEnqueueEventsAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_SCHEDULER_ENQUEUE_EVENTS_ERROR,\n error: toErrorString(error),\n entryId,\n });\n }\n };\n}\n","import uniqBy from \"lodash.uniqby\";\nimport {\n LIST_SCHEDULER_ENQUEUE_EVENTS_BEGIN,\n LIST_SCHEDULER_ENQUEUE_EVENTS_ERROR,\n LIST_SCHEDULER_ENQUEUE_EVENTS_SUCCESS,\n LIST_SCHEDULER_ENTRIES_BEGIN,\n LIST_SCHEDULER_ENTRIES_ERROR,\n LIST_SCHEDULER_ENTRIES_SUCCESS,\n SchedulerEntriesActionTypes,\n} from \"../actions/schedulerEntriesActions\";\nimport { SchedulerEnqueueEvent, SchedulerEntry } from \"../api\";\n\ninterface SchedulerEntriesState {\n loading: boolean;\n data: SchedulerEntry[];\n error: string; // error description\n enqueueEventsByEntryId: {\n [entryId: string]: { data: SchedulerEnqueueEvent[]; loading: boolean };\n };\n}\n\nexport function getEnqueueEventsEntry(\n state: SchedulerEntriesState,\n entryId: string\n): { data: SchedulerEnqueueEvent[]; loading: boolean } {\n return state.enqueueEventsByEntryId[entryId] || { data: [], loading: false };\n}\n\nconst initialState: SchedulerEntriesState = {\n loading: false,\n data: [],\n error: \"\",\n enqueueEventsByEntryId: {},\n};\n\nfunction schedulerEntriesReducer(\n state = initialState,\n action: SchedulerEntriesActionTypes\n): SchedulerEntriesState {\n switch (action.type) {\n case LIST_SCHEDULER_ENTRIES_BEGIN:\n return {\n ...state,\n loading: true,\n };\n case LIST_SCHEDULER_ENTRIES_SUCCESS:\n return {\n ...state,\n error: \"\",\n loading: false,\n data: action.payload.entries,\n };\n case LIST_SCHEDULER_ENTRIES_ERROR:\n return {\n ...state,\n loading: false,\n error: action.error,\n };\n case LIST_SCHEDULER_ENQUEUE_EVENTS_BEGIN: {\n const entry = getEnqueueEventsEntry(state, action.entryId);\n return {\n ...state,\n enqueueEventsByEntryId: {\n ...state.enqueueEventsByEntryId,\n [action.entryId]: {\n ...entry,\n loading: true,\n },\n },\n };\n }\n case LIST_SCHEDULER_ENQUEUE_EVENTS_SUCCESS: {\n const sortByEnqueuedAt = (\n e1: SchedulerEnqueueEvent,\n e2: SchedulerEnqueueEvent\n ): number => {\n return Date.parse(e2.enqueued_at) - Date.parse(e1.enqueued_at);\n };\n const entry = getEnqueueEventsEntry(state, action.entryId);\n const newData = uniqBy(\n [...entry.data, ...action.payload.events],\n \"task_id\"\n ).sort(sortByEnqueuedAt);\n return {\n ...state,\n enqueueEventsByEntryId: {\n ...state.enqueueEventsByEntryId,\n [action.entryId]: {\n loading: false,\n data: newData,\n },\n },\n };\n }\n case LIST_SCHEDULER_ENQUEUE_EVENTS_ERROR: {\n const entry = getEnqueueEventsEntry(state, action.entryId);\n return {\n ...state,\n enqueueEventsByEntryId: {\n ...state.enqueueEventsByEntryId,\n [action.entryId]: {\n ...entry,\n loading: false,\n },\n },\n };\n }\n default:\n return state;\n }\n}\n\nexport default schedulerEntriesReducer;\n","import React, { useEffect } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport { AppState } from \"../store\";\nimport { getEnqueueEventsEntry } from \"../reducers/schedulerEntriesReducer\";\nimport { listSchedulerEnqueueEventsAsync } from \"../actions/schedulerEntriesActions\";\nimport { timeAgo } from \"../utils\";\n\nconst useStyles = makeStyles((theme) => ({\n table: {\n height: \"80vh\",\n },\n stickyHeaderCell: {\n background: theme.palette.background.paper,\n },\n}));\n\nfunction mapStateToProps(state: AppState, ownProps: Props) {\n return {\n events: getEnqueueEventsEntry(state.schedulerEntries, ownProps.entryId),\n };\n}\n\nconst connector = connect(mapStateToProps, { listSchedulerEnqueueEventsAsync });\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n entryId: string; // Scheduler Entry ID\n}\n\nfunction SchedulerEnqueueEventsTable(props: Props & ReduxProps) {\n const classes = useStyles();\n const { listSchedulerEnqueueEventsAsync, entryId, events } = props;\n\n useEffect(() => {\n listSchedulerEnqueueEventsAsync(entryId);\n }, [entryId, listSchedulerEnqueueEventsAsync]);\n\n // TODO: loading state UI\n\n // TODO: \"Load More\" button OR infinite scroll\n\n return (\n \n \n \n \n \n Enqueued\n \n \n Task ID\n \n \n \n \n {events.data.map((e) => (\n \n \n {timeAgo(e.enqueued_at)}\n \n {e.task_id}\n \n ))}\n \n \n \n );\n}\n\nexport default connector(SchedulerEnqueueEventsTable);\n","import React, { useState } from \"react\";\nimport clsx from \"clsx\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HistoryIcon from \"@material-ui/icons/History\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport { SortDirection, SortableTableColumn } from \"../types/table\";\nimport TableSortLabel from \"@material-ui/core/TableSortLabel\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport { SchedulerEntry } from \"../api\";\nimport { timeAgo, durationBefore, prettifyPayload } from \"../utils\";\nimport SchedulerEnqueueEventsTable from \"./SchedulerEnqueueEventsTable\";\n\nconst useStyles = makeStyles((theme) => ({\n table: {\n minWidth: 650,\n },\n noBorder: {\n border: \"none\",\n },\n fixedCell: {\n position: \"sticky\",\n zIndex: 1,\n left: 0,\n background: theme.palette.background.paper,\n },\n modal: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n modalContent: {\n background: theme.palette.background.paper,\n padding: theme.spacing(2),\n width: \"540px\",\n outline: \"none\",\n borderRadius: theme.shape.borderRadius,\n },\n eventsTable: {\n maxHeight: \"80vh\",\n },\n}));\n\nenum SortBy {\n EntryId,\n Spec,\n Type,\n Payload,\n Options,\n NextEnqueue,\n PrevEnqueue,\n\n None,\n}\n\nconst colConfigs: SortableTableColumn[] = [\n {\n label: \"Entry ID\",\n key: \"entry_id\",\n sortBy: SortBy.EntryId,\n align: \"left\",\n },\n {\n label: \"Spec\",\n key: \"spec\",\n sortBy: SortBy.Spec,\n align: \"left\",\n },\n {\n label: \"Type\",\n key: \"type\",\n sortBy: SortBy.Type,\n align: \"left\",\n },\n {\n label: \"Payload\",\n key: \"task_payload\",\n sortBy: SortBy.Payload,\n align: \"left\",\n },\n {\n label: \"Options\",\n key: \"options\",\n sortBy: SortBy.Options,\n align: \"left\",\n },\n {\n label: \"Next Enqueue\",\n key: \"next_enqueue\",\n sortBy: SortBy.NextEnqueue,\n align: \"left\",\n },\n {\n label: \"Prev Enqueue\",\n key: \"prev_enqueue\",\n sortBy: SortBy.PrevEnqueue,\n align: \"left\",\n },\n {\n label: \"\",\n key: \"show_history\",\n sortBy: SortBy.None,\n align: \"left\",\n },\n];\n\n// sortEntries takes a array of entries and return a sorted array.\n// It returns a new array and leave the original array untouched.\nfunction sortEntries(\n entries: SchedulerEntry[],\n cmpFn: (first: SchedulerEntry, second: SchedulerEntry) => number\n): SchedulerEntry[] {\n let copy = [...entries];\n copy.sort(cmpFn);\n return copy;\n}\n\ninterface Props {\n entries: SchedulerEntry[];\n}\n\nexport default function SchedulerEntriesTable(props: Props) {\n const classes = useStyles();\n const [sortBy, setSortBy] = useState(SortBy.EntryId);\n const [sortDir, setSortDir] = useState(SortDirection.Asc);\n const [activeEntryId, setActiveEntryId] = useState(\"\");\n\n const createSortClickHandler = (sortKey: SortBy) => (e: React.MouseEvent) => {\n if (sortKey === sortBy) {\n // Toggle sort direction.\n const nextSortDir =\n sortDir === SortDirection.Asc ? SortDirection.Desc : SortDirection.Asc;\n setSortDir(nextSortDir);\n } else {\n // Change the sort key.\n setSortBy(sortKey);\n }\n };\n\n const cmpFunc = (e1: SchedulerEntry, e2: SchedulerEntry): number => {\n let isE1Smaller: boolean;\n switch (sortBy) {\n case SortBy.EntryId:\n if (e1.id === e2.id) return 0;\n isE1Smaller = e1.id < e2.id;\n break;\n case SortBy.Spec:\n if (e1.spec === e2.spec) return 0;\n isE1Smaller = e1.spec < e2.spec;\n break;\n case SortBy.Type:\n if (e1.task_type === e2.task_type) return 0;\n isE1Smaller = e1.task_type < e2.task_type;\n break;\n case SortBy.Payload:\n if (e1.task_payload === e2.task_payload) return 0;\n isE1Smaller = e1.task_payload < e2.task_payload;\n break;\n case SortBy.Options:\n if (e1.options === e2.options) return 0;\n isE1Smaller = e1.options < e2.options;\n break;\n case SortBy.NextEnqueue:\n if (e1.next_enqueue_at === e2.next_enqueue_at) return 0;\n isE1Smaller = e1.next_enqueue_at < e2.next_enqueue_at;\n break;\n case SortBy.PrevEnqueue:\n const e1PrevEnqueueAt = e1.prev_enqueue_at || \"\";\n const e2PrevEnqueueAt = e2.prev_enqueue_at || \"\";\n if (e1PrevEnqueueAt === e2PrevEnqueueAt) return 0;\n isE1Smaller = e1PrevEnqueueAt < e2PrevEnqueueAt;\n break;\n default:\n // eslint-disable-next-line no-throw-literal\n throw `Unexpected order by value: ${sortBy}`;\n }\n if (sortDir === SortDirection.Asc) {\n return isE1Smaller ? -1 : 1;\n } else {\n return isE1Smaller ? 1 : -1;\n }\n };\n\n if (props.entries.length === 0) {\n return (\n \n Info\n No entries found at this time.\n \n );\n }\n\n return (\n <>\n \n \n \n \n {colConfigs.map((cfg, i) => (\n \n \n {cfg.label}\n \n \n ))}\n \n \n \n {sortEntries(props.entries, cmpFunc).map((entry, idx) => (\n setActiveEntryId(entry.id)}\n />\n ))}\n \n
    \n setActiveEntryId(\"\")}\n className={classes.modal}\n >\n
    \n \n Recent History\n \n \n
    \n \n
    \n \n );\n}\n\ninterface RowProps {\n entry: SchedulerEntry;\n isLastRow: boolean;\n onShowHistoryClick: () => void;\n}\n\nconst useRowStyles = makeStyles((theme) => ({\n rowRoot: {\n \"& > *\": {\n borderBottom: \"unset\",\n },\n },\n noBorder: {\n border: \"none\",\n },\n}));\n\nfunction Row(props: RowProps) {\n const { entry, isLastRow } = props;\n const classes = useRowStyles();\n return (\n \n \n {entry.id}\n \n \n {entry.spec}\n \n \n {entry.task_type}\n \n \n \n {prettifyPayload(entry.task_payload)}\n \n \n \n \n {entry.options.length > 0 ? entry.options.join(\", \") : \"No options\"}\n \n \n \n {durationBefore(entry.next_enqueue_at)}\n \n \n {entry.prev_enqueue_at ? timeAgo(entry.prev_enqueue_at) : \"N/A\"}\n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport Container from \"@material-ui/core/Container\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport SchedulerEntriesTable from \"../components/SchedulerEntriesTable\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport { AppState } from \"../store\";\nimport { listSchedulerEntriesAsync } from \"../actions/schedulerEntriesActions\";\nimport { usePolling } from \"../hooks\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n heading: {\n paddingLeft: theme.spacing(2),\n marginBottom: theme.spacing(1),\n },\n}));\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.schedulerEntries.loading,\n error: state.schedulerEntries.error,\n entries: state.schedulerEntries.data,\n pollInterval: state.settings.pollInterval,\n };\n}\n\nconst connector = connect(mapStateToProps, { listSchedulerEntriesAsync });\n\ntype Props = ConnectedProps;\n\nfunction SchedulersView(props: Props) {\n const { pollInterval, listSchedulerEntriesAsync } = props;\n const classes = useStyles();\n\n usePolling(listSchedulerEntriesAsync, pollInterval);\n\n return (\n \n \n {props.error === \"\" ? (\n \n \n \n Scheduler Entries\n \n \n \n \n ) : (\n \n \n Error\n Could not retrieve scheduler entries live data —{\" \"}\n See the logs for details\n \n \n )}\n \n \n );\n}\n\nexport default connector(SchedulersView);\n","import {\n batchCancelActiveTasks,\n BatchCancelTasksResponse,\n batchDeleteArchivedTasks,\n batchDeleteRetryTasks,\n batchDeleteScheduledTasks,\n batchDeleteCompletedTasks,\n BatchDeleteTasksResponse,\n batchArchiveRetryTasks,\n batchArchiveScheduledTasks,\n BatchArchiveTasksResponse,\n batchRunArchivedTasks,\n batchRunRetryTasks,\n batchRunScheduledTasks,\n BatchRunTasksResponse,\n cancelActiveTask,\n cancelAllActiveTasks,\n deleteAllArchivedTasks,\n deleteAllRetryTasks,\n deleteAllScheduledTasks,\n deleteAllCompletedTasks,\n deleteArchivedTask,\n deleteRetryTask,\n deleteScheduledTask,\n deleteCompletedTask,\n archiveAllRetryTasks,\n archiveAllScheduledTasks,\n archiveRetryTask,\n archiveScheduledTask,\n listActiveTasks,\n listArchivedTasks,\n listPendingTasks,\n ListTasksResponse,\n listRetryTasks,\n listScheduledTasks,\n listCompletedTasks,\n listAggregatingTasks,\n PaginationOptions,\n runAllArchivedTasks,\n runAllRetryTasks,\n runAllScheduledTasks,\n runArchivedTask,\n runRetryTask,\n runScheduledTask,\n deletePendingTask,\n batchDeletePendingTasks,\n deleteAllPendingTasks,\n archivePendingTask,\n batchArchivePendingTasks,\n archiveAllPendingTasks,\n TaskInfo,\n getTaskInfo,\n deleteAllAggregatingTasks,\n archiveAllAggregatingTasks,\n runAllAggregatingTasks,\n batchDeleteAggregatingTasks,\n batchArchiveAggregatingTasks,\n batchRunAggregatingTasks,\n deleteAggregatingTask,\n runAggregatingTask,\n archiveAggregatingTask,\n ListAggregatingTasksResponse,\n} from \"../api\";\nimport { Dispatch } from \"redux\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\n// List of tasks related action types.\nexport const GET_TASK_INFO_BEGIN = \"GET_TASK_INFO_BEGIN\";\nexport const GET_TASK_INFO_SUCCESS = \"GET_TASK_INFO_SUCCESS\";\nexport const GET_TASK_INFO_ERROR = \"GET_TASK_INFO_ERROR\";\nexport const LIST_ACTIVE_TASKS_BEGIN = \"LIST_ACTIVE_TASKS_BEGIN\";\nexport const LIST_ACTIVE_TASKS_SUCCESS = \"LIST_ACTIVE_TASKS_SUCCESS\";\nexport const LIST_ACTIVE_TASKS_ERROR = \"LIST_ACTIVE_TASKS_ERROR\";\nexport const LIST_PENDING_TASKS_BEGIN = \"LIST_PENDING_TASKS_BEGIN\";\nexport const LIST_PENDING_TASKS_SUCCESS = \"LIST_PENDING_TASKS_SUCCESS\";\nexport const LIST_PENDING_TASKS_ERROR = \"LIST_PENDING_TASKS_ERROR\";\nexport const LIST_SCHEDULED_TASKS_BEGIN = \"LIST_SCHEDULED_TASKS_BEGIN\";\nexport const LIST_SCHEDULED_TASKS_SUCCESS = \"LIST_SCHEDULED_TASKS_SUCCESS\";\nexport const LIST_SCHEDULED_TASKS_ERROR = \"LIST_SCHEDULED_TASKS_ERROR\";\nexport const LIST_RETRY_TASKS_BEGIN = \"LIST_RETRY_TASKS_BEGIN\";\nexport const LIST_RETRY_TASKS_SUCCESS = \"LIST_RETRY_TASKS_SUCCESS\";\nexport const LIST_RETRY_TASKS_ERROR = \"LIST_RETRY_TASKS_ERROR\";\nexport const LIST_ARCHIVED_TASKS_BEGIN = \"LIST_ARCHIVED_TASKS_BEGIN\";\nexport const LIST_ARCHIVED_TASKS_SUCCESS = \"LIST_ARCHIVED_TASKS_SUCCESS\";\nexport const LIST_ARCHIVED_TASKS_ERROR = \"LIST_ARCHIVED_TASKS_ERROR\";\nexport const LIST_COMPLETED_TASKS_BEGIN = \"LIST_COMPLETED_TASKS_BEGIN\";\nexport const LIST_COMPLETED_TASKS_SUCCESS = \"LIST_COMPLETED_TASKS_SUCCESS\";\nexport const LIST_COMPLETED_TASKS_ERROR = \"LIST_COMPLETED_TASKS_ERROR\";\nexport const LIST_AGGREGATING_TASKS_BEGIN = \"LIST_AGGREGATING_TASKS_BEGIN\";\nexport const LIST_AGGREGATING_TASKS_SUCCESS = \"LIST_AGGREGATING_TASKS_SUCCESS\";\nexport const LIST_AGGREGATING_TASKS_ERROR = \"LIST_AGGREGATING_TASKS_ERROR\";\nexport const CANCEL_ACTIVE_TASK_BEGIN = \"CANCEL_ACTIVE_TASK_BEGIN\";\nexport const CANCEL_ACTIVE_TASK_SUCCESS = \"CANCEL_ACTIVE_TASK_SUCCESS\";\nexport const CANCEL_ACTIVE_TASK_ERROR = \"CANCEL_ACTIVE_TASK_ERROR\";\nexport const CANCEL_ALL_ACTIVE_TASKS_BEGIN = \"CANCEL_ALL_ACTIVE_TASKS_BEGIN\";\nexport const CANCEL_ALL_ACTIVE_TASKS_SUCCESS =\n \"CANCEL_ALL_ACTIVE_TASKS_SUCCESS\";\nexport const CANCEL_ALL_ACTIVE_TASKS_ERROR = \"CANCEL_ALL_ACTIVE_TASKS_ERROR\";\nexport const BATCH_CANCEL_ACTIVE_TASKS_BEGIN =\n \"BATCH_CANCEL_ACTIVE_TASKS_BEGIN\";\nexport const BATCH_CANCEL_ACTIVE_TASKS_SUCCESS =\n \"BATCH_CANCEL_ACTIVE_TASKS_SUCCESS\";\nexport const BATCH_CANCEL_ACTIVE_TASKS_ERROR =\n \"BATCH_CANCEL_ACTIVE_TASKS_ERROR\";\nexport const RUN_SCHEDULED_TASK_BEGIN = \"RUN_SCHEDULED_TASK_BEGIN\";\nexport const RUN_SCHEDULED_TASK_SUCCESS = \"RUN_SCHEDULED_TASK_SUCCESS\";\nexport const RUN_SCHEDULED_TASK_ERROR = \"RUN_SCHEDULED_TASK_ERROR\";\nexport const RUN_RETRY_TASK_BEGIN = \"RUN_RETRY_TASK_BEGIN\";\nexport const RUN_RETRY_TASK_SUCCESS = \"RUN_RETRY_TASK_SUCCESS\";\nexport const RUN_RETRY_TASK_ERROR = \"RUN_RETRY_TASK_ERROR\";\nexport const RUN_ARCHIVED_TASK_BEGIN = \"RUN_ARCHIVED_TASK_BEGIN\";\nexport const RUN_ARCHIVED_TASK_SUCCESS = \"RUN_ARCHIVED_TASK_SUCCESS\";\nexport const RUN_ARCHIVED_TASK_ERROR = \"RUN_ARCHIVED_TASK_ERROR\";\nexport const DELETE_PENDING_TASK_BEGIN = \"DELETE_PENDING_TASK_BEGIN\";\nexport const DELETE_PENDING_TASK_SUCCESS = \"DELETE_PENDING_TASK_SUCCESS\";\nexport const DELETE_PENDING_TASK_ERROR = \"DELETE_PENDING_TASK_ERROR\";\nexport const ARCHIVE_PENDING_TASK_BEGIN = \"ARCHIVE_PENDING_TASK_BEGIN\";\nexport const ARCHIVE_PENDING_TASK_SUCCESS = \"ARCHIVE_PENDING_TASK_SUCCESS\";\nexport const ARCHIVE_PENDING_TASK_ERROR = \"ARCHIVE_PENDING_TASK_ERROR\";\nexport const DELETE_SCHEDULED_TASK_BEGIN = \"DELETE_SCHEDULED_TASK_BEGIN\";\nexport const DELETE_SCHEDULED_TASK_SUCCESS = \"DELETE_SCHEDULED_TASK_SUCCESS\";\nexport const DELETE_SCHEDULED_TASK_ERROR = \"DELETE_SCHEDULED_TASK_ERROR\";\nexport const ARCHIVE_SCHEDULED_TASK_BEGIN = \"ARCHIVE_SCHEDULED_TASK_BEGIN\";\nexport const ARCHIVE_SCHEDULED_TASK_SUCCESS = \"ARCHIVE_SCHEDULED_TASK_SUCCESS\";\nexport const ARCHIVE_SCHEDULED_TASK_ERROR = \"ARCHIVE_SCHEDULED_TASK_ERROR\";\nexport const ARCHIVE_RETRY_TASK_BEGIN = \"ARCHIVE_RETRY_TASK_BEGIN\";\nexport const ARCHIVE_RETRY_TASK_SUCCESS = \"ARCHIVE_RETRY_TASK_SUCCESS\";\nexport const ARCHIVE_RETRY_TASK_ERROR = \"ARCHIVE_RETRY_TASK_ERROR\";\nexport const RUN_AGGREGATING_TASK_BEGIN = \"RUN_AGGREGATING_TASK_BEGIN\";\nexport const RUN_AGGREGATING_TASK_SUCCESS = \"RUN_AGGREGATING_TASK_SUCCESS\";\nexport const RUN_AGGREGATING_TASK_ERROR = \"RUN_AGGREGATING_TASK_ERROR\";\nexport const DELETE_AGGREGATING_TASK_BEGIN = \"DELETE_AGGREGATING_TASK_BEGIN\";\nexport const DELETE_AGGREGATING_TASK_SUCCESS =\n \"DELETE_AGGREGATING_TASK_SUCCESS\";\nexport const DELETE_AGGREGATING_TASK_ERROR = \"DELETE_AGGREGATING_TASK_ERROR\";\nexport const ARCHIVE_AGGREGATING_TASK_BEGIN = \"ARCHIVE_AGGREGATING_TASK_BEGIN\";\nexport const ARCHIVE_AGGREGATING_TASK_SUCCESS =\n \"ARCHIVE_AGGREGATING_TASK_SUCCESS\";\nexport const ARCHIVE_AGGREGATING_TASK_ERROR = \"ARCHIVE_AGGREGATING_TASK_ERROR\";\nexport const BATCH_ARCHIVE_PENDING_TASKS_BEGIN =\n \"BATCH_ARCHIVE_PENDING_TASKS_BEGIN\";\nexport const BATCH_ARCHIVE_PENDING_TASKS_SUCCESS =\n \"BATCH_ARCHIVE_PENDING_TASKS_SUCCESS\";\nexport const BATCH_ARCHIVE_PENDING_TASKS_ERROR =\n \"BATCH_RUN_PENDING_TASKS_ERROR\";\nexport const BATCH_DELETE_PENDING_TASKS_BEGIN =\n \"BATCH_DELETE_PENDING_TASKS_BEGIN\";\nexport const BATCH_DELETE_PENDING_TASKS_SUCCESS =\n \"BATCH_DELETE_PENDING_TASKS_SUCCESS\";\nexport const BATCH_DELETE_PENDING_TASKS_ERROR =\n \"BATCH_DELETE_PENDING_TASKS_ERROR\";\nexport const DELETE_ALL_PENDING_TASKS_BEGIN = \"DELETE_ALL_PENDING_TASKS_BEGIN\";\nexport const DELETE_ALL_PENDING_TASKS_SUCCESS =\n \"DELETE_ALL_PENDING_TASKS_SUCCESS\";\nexport const DELETE_ALL_PENDING_TASKS_ERROR = \"DELETE_ALL_PENDING_TASKS_ERROR\";\nexport const ARCHIVE_ALL_PENDING_TASKS_BEGIN =\n \"ARCHIVE_ALL_PENDING_TASKS_BEGIN\";\nexport const ARCHIVE_ALL_PENDING_TASKS_SUCCESS =\n \"ARCHIVE_ALL_PENDING_TASKS_SUCCESS\";\nexport const ARCHIVE_ALL_PENDING_TASKS_ERROR =\n \"ARCHIVE_ALL_PENDING_TASKS_ERROR\";\nexport const BATCH_RUN_SCHEDULED_TASKS_BEGIN =\n \"BATCH_RUN_SCHEDULED_TASKS_BEGIN\";\nexport const BATCH_RUN_SCHEDULED_TASKS_SUCCESS =\n \"BATCH_RUN_SCHEDULED_TASKS_SUCCESS\";\nexport const BATCH_RUN_SCHEDULED_TASKS_ERROR =\n \"BATCH_RUN_SCHEDULED_TASKS_ERROR\";\nexport const BATCH_ARCHIVE_SCHEDULED_TASKS_BEGIN =\n \"BATCH_ARCHIVE_SCHEDULED_TASKS_BEGIN\";\nexport const BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS =\n \"BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS\";\nexport const BATCH_ARCHIVE_SCHEDULED_TASKS_ERROR =\n \"BATCH_RUN_SCHEDULED_TASKS_ERROR\";\nexport const BATCH_DELETE_SCHEDULED_TASKS_BEGIN =\n \"BATCH_DELETE_SCHEDULED_TASKS_BEGIN\";\nexport const BATCH_DELETE_SCHEDULED_TASKS_SUCCESS =\n \"BATCH_DELETE_SCHEDULED_TASKS_SUCCESS\";\nexport const BATCH_DELETE_SCHEDULED_TASKS_ERROR =\n \"BATCH_DELETE_SCHEDULED_TASKS_ERROR\";\nexport const RUN_ALL_SCHEDULED_TASKS_BEGIN = \"RUN_ALL_SCHEDULED_TASKS_BEGIN\";\nexport const RUN_ALL_SCHEDULED_TASKS_SUCCESS =\n \"RUN_ALL_SCHEDULED_TASKS_SUCCESS\";\nexport const RUN_ALL_SCHEDULED_TASKS_ERROR = \"RUN_ALL_SCHEDULED_TASKS_ERROR\";\nexport const ARCHIVE_ALL_SCHEDULED_TASKS_BEGIN =\n \"ARCHIVE_ALL_SCHEDULED_TASKS_BEGIN\";\nexport const ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS =\n \"ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS\";\nexport const ARCHIVE_ALL_SCHEDULED_TASKS_ERROR =\n \"ARCHIVE_ALL_SCHEDULED_TASKS_ERROR\";\nexport const DELETE_ALL_SCHEDULED_TASKS_BEGIN =\n \"DELETE_ALL_SCHEDULED_TASKS_BEGIN\";\nexport const DELETE_ALL_SCHEDULED_TASKS_SUCCESS =\n \"DELETE_ALL_SCHEDULED_TASKS_SUCCESS\";\nexport const DELETE_ALL_SCHEDULED_TASKS_ERROR =\n \"DELETE_ALL_SCHEDULED_TASKS_ERROR\";\nexport const DELETE_RETRY_TASK_BEGIN = \"DELETE_RETRY_TASK_BEGIN\";\nexport const DELETE_RETRY_TASK_SUCCESS = \"DELETE_RETRY_TASK_SUCCESS\";\nexport const DELETE_RETRY_TASK_ERROR = \"DELETE_RETRY_TASK_ERROR\";\nexport const BATCH_RUN_RETRY_TASKS_BEGIN = \"BATCH_RUN_RETRY_TASKS_BEGIN\";\nexport const BATCH_RUN_RETRY_TASKS_SUCCESS = \"BATCH_RUN_RETRY_TASKS_SUCCESS\";\nexport const BATCH_RUN_RETRY_TASKS_ERROR = \"BATCH_RUN_RETRY_TASKS_ERROR\";\nexport const BATCH_ARCHIVE_RETRY_TASKS_BEGIN =\n \"BATCH_ARCHIVE_RETRY_TASKS_BEGIN\";\nexport const BATCH_ARCHIVE_RETRY_TASKS_SUCCESS =\n \"BATCH_ARCHIVE_RETRY_TASKS_SUCCESS\";\nexport const BATCH_ARCHIVE_RETRY_TASKS_ERROR =\n \"BATCH_ARCHIVE_RETRY_TASKS_ERROR\";\nexport const BATCH_DELETE_RETRY_TASKS_BEGIN = \"BATCH_DELETE_RETRY_TASKS_BEGIN\";\nexport const BATCH_DELETE_RETRY_TASKS_SUCCESS =\n \"BATCH_DELETE_RETRY_TASKS_SUCCESS\";\nexport const BATCH_DELETE_RETRY_TASKS_ERROR = \"BATCH_DELETE_RETRY_TASKS_ERROR\";\nexport const RUN_ALL_RETRY_TASKS_BEGIN = \"RUN_ALL_RETRY_TASKS_BEGIN\";\nexport const RUN_ALL_RETRY_TASKS_SUCCESS = \"RUN_ALL_RETRY_TASKS_SUCCESS\";\nexport const RUN_ALL_RETRY_TASKS_ERROR = \"RUN_ALL_RETRY_TASKS_ERROR\";\nexport const ARCHIVE_ALL_RETRY_TASKS_BEGIN = \"ARCHIVE_ALL_RETRY_TASKS_BEGIN\";\nexport const ARCHIVE_ALL_RETRY_TASKS_SUCCESS =\n \"ARCHIVE_ALL_RETRY_TASKS_SUCCESS\";\nexport const ARCHIVE_ALL_RETRY_TASKS_ERROR = \"ARCHIVE_ALL_RETRY_TASKS_ERROR\";\nexport const DELETE_ALL_RETRY_TASKS_BEGIN = \"DELETE_ALL_RETRY_TASKS_BEGIN\";\nexport const DELETE_ALL_RETRY_TASKS_SUCCESS = \"DELETE_ALL_RETRY_TASKS_SUCCESS\";\nexport const DELETE_ALL_RETRY_TASKS_ERROR = \"DELETE_ALL_RETRY_TASKS_ERROR\";\nexport const DELETE_ARCHIVED_TASK_BEGIN = \"DELETE_ARCHIVED_TASK_BEGIN\";\nexport const DELETE_ARCHIVED_TASK_SUCCESS = \"DELETE_ARCHIVED_TASK_SUCCESS\";\nexport const DELETE_ARCHIVED_TASK_ERROR = \"DELETE_ARCHIVED_TASK_ERROR\";\nexport const BATCH_RUN_ARCHIVED_TASKS_BEGIN = \"BATCH_RUN_ARCHIVED_TASKS_BEGIN\";\nexport const BATCH_RUN_ARCHIVED_TASKS_SUCCESS =\n \"BATCH_RUN_ARCHIVED_TASKS_SUCCESS\";\nexport const BATCH_RUN_ARCHIVED_TASKS_ERROR = \"BATCH_RUN_ARCHIVED_TASKS_ERROR\";\nexport const BATCH_DELETE_ARCHIVED_TASKS_BEGIN =\n \"BATCH_DELETE_ARCHIVED_TASKS_BEGIN\";\nexport const BATCH_DELETE_ARCHIVED_TASKS_SUCCESS =\n \"BATCH_DELETE_ARCHIVED_TASKS_SUCCESS\";\nexport const BATCH_DELETE_ARCHIVED_TASKS_ERROR =\n \"BATCH_DELETE_ARCHIVED_TASKS_ERROR\";\nexport const RUN_ALL_ARCHIVED_TASKS_BEGIN = \"RUN_ALL_ARCHIVED_TASKS_BEGIN\";\nexport const RUN_ALL_ARCHIVED_TASKS_SUCCESS = \"RUN_ALL_ARCHIVED_TASKS_SUCCESS\";\nexport const RUN_ALL_ARCHIVED_TASKS_ERROR = \"RUN_ALL_ARCHIVED_TASKS_ERROR\";\nexport const DELETE_ALL_ARCHIVED_TASKS_BEGIN =\n \"DELETE_ALL_ARCHIVED_TASKS_BEGIN\";\nexport const DELETE_ALL_ARCHIVED_TASKS_SUCCESS =\n \"DELETE_ALL_ARCHIVED_TASKS_SUCCESS\";\nexport const DELETE_ALL_ARCHIVED_TASKS_ERROR =\n \"DELETE_ALL_ARCHIVED_TASKS_ERROR\";\nexport const DELETE_COMPLETED_TASK_BEGIN = \"DELETE_COMPLETED_TASK_BEGIN\";\nexport const DELETE_COMPLETED_TASK_SUCCESS = \"DELETE_COMPLETED_TASK_SUCCESS\";\nexport const DELETE_COMPLETED_TASK_ERROR = \"DELETE_COMPLETED_TASK_ERROR\";\nexport const DELETE_ALL_COMPLETED_TASKS_BEGIN =\n \"DELETE_ALL_COMPLETED_TASKS_BEGIN\";\nexport const DELETE_ALL_COMPLETED_TASKS_SUCCESS =\n \"DELETE_ALL_COMPLETED_TASKS_SUCCESS\";\nexport const DELETE_ALL_COMPLETED_TASKS_ERROR =\n \"DELETE_ALL_COMPLETED_TASKS_ERROR\";\nexport const BATCH_DELETE_COMPLETED_TASKS_BEGIN =\n \"BATCH_DELETE_COMPLETED_TASKS_BEGIN\";\nexport const BATCH_DELETE_COMPLETED_TASKS_SUCCESS =\n \"BATCH_DELETE_COMPLETED_TASKS_SUCCESS\";\nexport const BATCH_DELETE_COMPLETED_TASKS_ERROR =\n \"BATCH_DELETE_COMPLETED_TASKS_ERROR\";\nexport const BATCH_RUN_AGGREGATING_TASKS_BEGIN =\n \"BATCH_RUN_AGGREGATING_TASKS_BEGIN\";\nexport const BATCH_RUN_AGGREGATING_TASKS_SUCCESS =\n \"BATCH_RUN_AGGREGATING_TASKS_SUCCESS\";\nexport const BATCH_RUN_AGGREGATING_TASKS_ERROR =\n \"BATCH_RUN_AGGREGATING_TASKS_ERROR\";\nexport const BATCH_ARCHIVE_AGGREGATING_TASKS_BEGIN =\n \"BATCH_ARCHIVE_AGGREGATING_TASKS_BEGIN\";\nexport const BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS =\n \"BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS\";\nexport const BATCH_ARCHIVE_AGGREGATING_TASKS_ERROR =\n \"BATCH_RUN_AGGREGATING_TASKS_ERROR\";\nexport const BATCH_DELETE_AGGREGATING_TASKS_BEGIN =\n \"BATCH_DELETE_AGGREGATING_TASKS_BEGIN\";\nexport const BATCH_DELETE_AGGREGATING_TASKS_SUCCESS =\n \"BATCH_DELETE_AGGREGATING_TASKS_SUCCESS\";\nexport const BATCH_DELETE_AGGREGATING_TASKS_ERROR =\n \"BATCH_DELETE_AGGREGATING_TASKS_ERROR\";\nexport const RUN_ALL_AGGREGATING_TASKS_BEGIN =\n \"RUN_ALL_AGGREGATING_TASKS_BEGIN\";\nexport const RUN_ALL_AGGREGATING_TASKS_SUCCESS =\n \"RUN_ALL_AGGREGATING_TASKS_SUCCESS\";\nexport const RUN_ALL_AGGREGATING_TASKS_ERROR =\n \"RUN_ALL_AGGREGATING_TASKS_ERROR\";\nexport const ARCHIVE_ALL_AGGREGATING_TASKS_BEGIN =\n \"ARCHIVE_ALL_AGGREGATING_TASKS_BEGIN\";\nexport const ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS =\n \"ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS\";\nexport const ARCHIVE_ALL_AGGREGATING_TASKS_ERROR =\n \"ARCHIVE_ALL_AGGREGATING_TASKS_ERROR\";\nexport const DELETE_ALL_AGGREGATING_TASKS_BEGIN =\n \"DELETE_ALL_AGGREGATING_TASKS_BEGIN\";\nexport const DELETE_ALL_AGGREGATING_TASKS_SUCCESS =\n \"DELETE_ALL_AGGREGATING_TASKS_SUCCESS\";\nexport const DELETE_ALL_AGGREGATING_TASKS_ERROR =\n \"DELETE_ALL_AGGREGATING_TASKS_ERROR\";\n\ninterface GetTaskInfoBeginAction {\n type: typeof GET_TASK_INFO_BEGIN;\n}\n\ninterface GetTaskInfoErrorAction {\n type: typeof GET_TASK_INFO_ERROR;\n error: string; // error description\n}\n\ninterface GetTaskInfoSuccessAction {\n type: typeof GET_TASK_INFO_SUCCESS;\n payload: TaskInfo;\n}\n\ninterface ListActiveTasksBeginAction {\n type: typeof LIST_ACTIVE_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ListActiveTasksSuccessAction {\n type: typeof LIST_ACTIVE_TASKS_SUCCESS;\n queue: string;\n payload: ListTasksResponse;\n}\n\ninterface ListActiveTasksErrorAction {\n type: typeof LIST_ACTIVE_TASKS_ERROR;\n queue: string;\n error: string; // error description\n}\n\ninterface ListPendingTasksBeginAction {\n type: typeof LIST_PENDING_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ListPendingTasksSuccessAction {\n type: typeof LIST_PENDING_TASKS_SUCCESS;\n queue: string;\n payload: ListTasksResponse;\n}\n\ninterface ListPendingTasksErrorAction {\n type: typeof LIST_PENDING_TASKS_ERROR;\n queue: string;\n error: string; // error description\n}\n\ninterface ListScheduledTasksBeginAction {\n type: typeof LIST_SCHEDULED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ListScheduledTasksSuccessAction {\n type: typeof LIST_SCHEDULED_TASKS_SUCCESS;\n queue: string;\n payload: ListTasksResponse;\n}\n\ninterface ListScheduledTasksErrorAction {\n type: typeof LIST_SCHEDULED_TASKS_ERROR;\n queue: string;\n error: string; // error description\n}\n\ninterface ListRetryTasksBeginAction {\n type: typeof LIST_RETRY_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ListRetryTasksSuccessAction {\n type: typeof LIST_RETRY_TASKS_SUCCESS;\n queue: string;\n payload: ListTasksResponse;\n}\n\ninterface ListRetryTasksErrorAction {\n type: typeof LIST_RETRY_TASKS_ERROR;\n queue: string;\n error: string; // error description\n}\n\ninterface ListArchivedTasksBeginAction {\n type: typeof LIST_ARCHIVED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ListArchivedTasksSuccessAction {\n type: typeof LIST_ARCHIVED_TASKS_SUCCESS;\n queue: string;\n payload: ListTasksResponse;\n}\n\ninterface ListArchivedTasksErrorAction {\n type: typeof LIST_ARCHIVED_TASKS_ERROR;\n queue: string;\n error: string; // error description\n}\n\ninterface ListCompletedTasksBeginAction {\n type: typeof LIST_COMPLETED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ListCompletedTasksSuccessAction {\n type: typeof LIST_COMPLETED_TASKS_SUCCESS;\n queue: string;\n payload: ListTasksResponse;\n}\n\ninterface ListCompletedTasksErrorAction {\n type: typeof LIST_COMPLETED_TASKS_ERROR;\n queue: string;\n error: string; // error description\n}\n\ninterface ListAggregatingTasksBeginAction {\n type: typeof LIST_AGGREGATING_TASKS_BEGIN;\n queue: string;\n group: string;\n}\n\ninterface ListAggregatingTasksSuccessAction {\n type: typeof LIST_AGGREGATING_TASKS_SUCCESS;\n queue: string;\n group: string;\n payload: ListAggregatingTasksResponse;\n}\n\ninterface ListAggregatingTasksErrorAction {\n type: typeof LIST_AGGREGATING_TASKS_ERROR;\n queue: string;\n group: string;\n error: string; // error description\n}\n\ninterface CancelActiveTaskBeginAction {\n type: typeof CANCEL_ACTIVE_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface CancelActiveTaskSuccessAction {\n type: typeof CANCEL_ACTIVE_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface CancelActiveTaskErrorAction {\n type: typeof CANCEL_ACTIVE_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface CancelAllActiveTasksBeginAction {\n type: typeof CANCEL_ALL_ACTIVE_TASKS_BEGIN;\n queue: string;\n}\n\ninterface CancelAllActiveTasksSuccessAction {\n type: typeof CANCEL_ALL_ACTIVE_TASKS_SUCCESS;\n queue: string;\n}\n\ninterface CancelAllActiveTasksErrorAction {\n type: typeof CANCEL_ALL_ACTIVE_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface BatchCancelActiveTasksBeginAction {\n type: typeof BATCH_CANCEL_ACTIVE_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchCancelActiveTasksSuccessAction {\n type: typeof BATCH_CANCEL_ACTIVE_TASKS_SUCCESS;\n queue: string;\n payload: BatchCancelTasksResponse;\n}\n\ninterface BatchCancelActiveTasksErrorAction {\n type: typeof BATCH_CANCEL_ACTIVE_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface DeletePendingTaskBeginAction {\n type: typeof DELETE_PENDING_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface DeletePendingTaskSuccessAction {\n type: typeof DELETE_PENDING_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface DeletePendingTaskErrorAction {\n type: typeof DELETE_PENDING_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface BatchDeletePendingTasksBeginAction {\n type: typeof BATCH_DELETE_PENDING_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchDeletePendingTasksSuccessAction {\n type: typeof BATCH_DELETE_PENDING_TASKS_SUCCESS;\n queue: string;\n payload: BatchDeleteTasksResponse;\n}\n\ninterface BatchDeletePendingTasksErrorAction {\n type: typeof BATCH_DELETE_PENDING_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface DeleteAllPendingTasksBeginAction {\n type: typeof DELETE_ALL_PENDING_TASKS_BEGIN;\n queue: string;\n}\n\ninterface DeleteAllPendingTasksSuccessAction {\n type: typeof DELETE_ALL_PENDING_TASKS_SUCCESS;\n queue: string;\n deleted: number;\n}\n\ninterface DeleteAllPendingTasksErrorAction {\n type: typeof DELETE_ALL_PENDING_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface ArchivePendingTaskBeginAction {\n type: typeof ARCHIVE_PENDING_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface ArchivePendingTaskSuccessAction {\n type: typeof ARCHIVE_PENDING_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface ArchivePendingTaskErrorAction {\n type: typeof ARCHIVE_PENDING_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface BatchArchivePendingTasksBeginAction {\n type: typeof BATCH_ARCHIVE_PENDING_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchArchivePendingTasksSuccessAction {\n type: typeof BATCH_ARCHIVE_PENDING_TASKS_SUCCESS;\n queue: string;\n payload: BatchArchiveTasksResponse;\n}\n\ninterface BatchArchivePendingTasksErrorAction {\n type: typeof BATCH_ARCHIVE_PENDING_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface ArchiveAllPendingTasksBeginAction {\n type: typeof ARCHIVE_ALL_PENDING_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ArchiveAllPendingTasksSuccessAction {\n type: typeof ARCHIVE_ALL_PENDING_TASKS_SUCCESS;\n queue: string;\n}\n\ninterface ArchiveAllPendingTasksErrorAction {\n type: typeof ARCHIVE_ALL_PENDING_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface RunScheduledTaskBeginAction {\n type: typeof RUN_SCHEDULED_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface RunScheduledTaskSuccessAction {\n type: typeof RUN_SCHEDULED_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface RunScheduledTaskErrorAction {\n type: typeof RUN_SCHEDULED_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface ArchiveScheduledTaskBeginAction {\n type: typeof ARCHIVE_SCHEDULED_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface ArchiveScheduledTaskSuccessAction {\n type: typeof ARCHIVE_SCHEDULED_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface ArchiveScheduledTaskErrorAction {\n type: typeof ARCHIVE_SCHEDULED_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface RunRetryTaskBeginAction {\n type: typeof RUN_RETRY_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface RunRetryTaskSuccessAction {\n type: typeof RUN_RETRY_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface RunRetryTaskErrorAction {\n type: typeof RUN_RETRY_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface ArchiveRetryTaskBeginAction {\n type: typeof ARCHIVE_RETRY_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface ArchiveRetryTaskSuccessAction {\n type: typeof ARCHIVE_RETRY_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface ArchiveRetryTaskErrorAction {\n type: typeof ARCHIVE_RETRY_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface RunArchivedTaskBeginAction {\n type: typeof RUN_ARCHIVED_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface RunArchivedTaskSuccessAction {\n type: typeof RUN_ARCHIVED_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface RunArchivedTaskErrorAction {\n type: typeof RUN_ARCHIVED_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface DeleteScheduledTaskBeginAction {\n type: typeof DELETE_SCHEDULED_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteScheduledTaskSuccessAction {\n type: typeof DELETE_SCHEDULED_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteScheduledTaskErrorAction {\n type: typeof DELETE_SCHEDULED_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface BatchDeleteScheduledTasksBeginAction {\n type: typeof BATCH_DELETE_SCHEDULED_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchDeleteScheduledTasksSuccessAction {\n type: typeof BATCH_DELETE_SCHEDULED_TASKS_SUCCESS;\n queue: string;\n payload: BatchDeleteTasksResponse;\n}\n\ninterface BatchDeleteScheduledTasksErrorAction {\n type: typeof BATCH_DELETE_SCHEDULED_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface BatchRunScheduledTasksBeginAction {\n type: typeof BATCH_RUN_SCHEDULED_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchRunScheduledTasksSuccessAction {\n type: typeof BATCH_RUN_SCHEDULED_TASKS_SUCCESS;\n queue: string;\n payload: BatchRunTasksResponse;\n}\n\ninterface BatchRunScheduledTasksErrorAction {\n type: typeof BATCH_RUN_SCHEDULED_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface RunAllScheduledTasksBeginAction {\n type: typeof RUN_ALL_SCHEDULED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface RunAllScheduledTasksSuccessAction {\n type: typeof RUN_ALL_SCHEDULED_TASKS_SUCCESS;\n queue: string;\n}\n\ninterface RunAllScheduledTasksErrorAction {\n type: typeof RUN_ALL_SCHEDULED_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface BatchArchiveScheduledTasksBeginAction {\n type: typeof BATCH_ARCHIVE_SCHEDULED_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchArchiveScheduledTasksSuccessAction {\n type: typeof BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS;\n queue: string;\n payload: BatchArchiveTasksResponse;\n}\n\ninterface BatchArchiveScheduledTasksErrorAction {\n type: typeof BATCH_ARCHIVE_SCHEDULED_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface ArchiveAllScheduledTasksBeginAction {\n type: typeof ARCHIVE_ALL_SCHEDULED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ArchiveAllScheduledTasksSuccessAction {\n type: typeof ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS;\n queue: string;\n}\n\ninterface ArchiveAllScheduledTasksErrorAction {\n type: typeof ARCHIVE_ALL_SCHEDULED_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface DeleteAllScheduledTasksBeginAction {\n type: typeof DELETE_ALL_SCHEDULED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface DeleteAllScheduledTasksSuccessAction {\n type: typeof DELETE_ALL_SCHEDULED_TASKS_SUCCESS;\n queue: string;\n deleted: number;\n}\n\ninterface DeleteAllScheduledTasksErrorAction {\n type: typeof DELETE_ALL_SCHEDULED_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface DeleteRetryTaskBeginAction {\n type: typeof DELETE_RETRY_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteRetryTaskSuccessAction {\n type: typeof DELETE_RETRY_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteRetryTaskErrorAction {\n type: typeof DELETE_RETRY_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface BatchDeleteRetryTasksBeginAction {\n type: typeof BATCH_DELETE_RETRY_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchDeleteRetryTasksSuccessAction {\n type: typeof BATCH_DELETE_RETRY_TASKS_SUCCESS;\n queue: string;\n payload: BatchDeleteTasksResponse;\n}\n\ninterface BatchDeleteRetryTasksErrorAction {\n type: typeof BATCH_DELETE_RETRY_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface BatchRunRetryTasksBeginAction {\n type: typeof BATCH_RUN_RETRY_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchRunRetryTasksSuccessAction {\n type: typeof BATCH_RUN_RETRY_TASKS_SUCCESS;\n queue: string;\n payload: BatchRunTasksResponse;\n}\n\ninterface BatchRunRetryTasksErrorAction {\n type: typeof BATCH_RUN_RETRY_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface RunAllRetryTasksBeginAction {\n type: typeof RUN_ALL_RETRY_TASKS_BEGIN;\n queue: string;\n}\n\ninterface RunAllRetryTasksSuccessAction {\n type: typeof RUN_ALL_RETRY_TASKS_SUCCESS;\n queue: string;\n}\n\ninterface RunAllRetryTasksErrorAction {\n type: typeof RUN_ALL_RETRY_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface BatchArchiveRetryTasksBeginAction {\n type: typeof BATCH_ARCHIVE_RETRY_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchArchiveRetryTasksSuccessAction {\n type: typeof BATCH_ARCHIVE_RETRY_TASKS_SUCCESS;\n queue: string;\n payload: BatchArchiveTasksResponse;\n}\n\ninterface BatchArchiveRetryTasksErrorAction {\n type: typeof BATCH_ARCHIVE_RETRY_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface ArchiveAllRetryTasksBeginAction {\n type: typeof ARCHIVE_ALL_RETRY_TASKS_BEGIN;\n queue: string;\n}\n\ninterface ArchiveAllRetryTasksSuccessAction {\n type: typeof ARCHIVE_ALL_RETRY_TASKS_SUCCESS;\n queue: string;\n}\n\ninterface ArchiveAllRetryTasksErrorAction {\n type: typeof ARCHIVE_ALL_RETRY_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface DeleteAllRetryTasksBeginAction {\n type: typeof DELETE_ALL_RETRY_TASKS_BEGIN;\n queue: string;\n}\n\ninterface DeleteAllRetryTasksSuccessAction {\n type: typeof DELETE_ALL_RETRY_TASKS_SUCCESS;\n queue: string;\n deleted: number;\n}\n\ninterface DeleteAllRetryTasksErrorAction {\n type: typeof DELETE_ALL_RETRY_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface DeleteArchivedTaskBeginAction {\n type: typeof DELETE_ARCHIVED_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteArchivedTaskSuccessAction {\n type: typeof DELETE_ARCHIVED_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteArchivedTaskErrorAction {\n type: typeof DELETE_ARCHIVED_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface BatchDeleteArchivedTasksBeginAction {\n type: typeof BATCH_DELETE_ARCHIVED_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchDeleteArchivedTasksSuccessAction {\n type: typeof BATCH_DELETE_ARCHIVED_TASKS_SUCCESS;\n queue: string;\n payload: BatchDeleteTasksResponse;\n}\n\ninterface BatchDeleteArchivedTasksErrorAction {\n type: typeof BATCH_DELETE_ARCHIVED_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface BatchRunArchivedTasksBeginAction {\n type: typeof BATCH_RUN_ARCHIVED_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchRunArchivedTasksSuccessAction {\n type: typeof BATCH_RUN_ARCHIVED_TASKS_SUCCESS;\n queue: string;\n payload: BatchRunTasksResponse;\n}\n\ninterface BatchRunArchivedTasksErrorAction {\n type: typeof BATCH_RUN_ARCHIVED_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface RunAllArchivedTasksBeginAction {\n type: typeof RUN_ALL_ARCHIVED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface RunAllArchivedTasksSuccessAction {\n type: typeof RUN_ALL_ARCHIVED_TASKS_SUCCESS;\n queue: string;\n}\n\ninterface RunAllArchivedTasksErrorAction {\n type: typeof RUN_ALL_ARCHIVED_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface DeleteAllArchivedTasksBeginAction {\n type: typeof DELETE_ALL_ARCHIVED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface DeleteAllArchivedTasksSuccessAction {\n type: typeof DELETE_ALL_ARCHIVED_TASKS_SUCCESS;\n queue: string;\n deleted: number;\n}\n\ninterface DeleteAllArchivedTasksErrorAction {\n type: typeof DELETE_ALL_ARCHIVED_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface DeleteCompletedTaskBeginAction {\n type: typeof DELETE_COMPLETED_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteCompletedTaskSuccessAction {\n type: typeof DELETE_COMPLETED_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteCompletedTaskErrorAction {\n type: typeof DELETE_COMPLETED_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface BatchDeleteCompletedTasksBeginAction {\n type: typeof BATCH_DELETE_COMPLETED_TASKS_BEGIN;\n queue: string;\n taskIds: string[];\n}\n\ninterface BatchDeleteCompletedTasksSuccessAction {\n type: typeof BATCH_DELETE_COMPLETED_TASKS_SUCCESS;\n queue: string;\n payload: BatchDeleteTasksResponse;\n}\n\ninterface BatchDeleteCompletedTasksErrorAction {\n type: typeof BATCH_DELETE_COMPLETED_TASKS_ERROR;\n queue: string;\n taskIds: string[];\n error: string;\n}\n\ninterface DeleteAllCompletedTasksBeginAction {\n type: typeof DELETE_ALL_COMPLETED_TASKS_BEGIN;\n queue: string;\n}\n\ninterface DeleteAllCompletedTasksSuccessAction {\n type: typeof DELETE_ALL_COMPLETED_TASKS_SUCCESS;\n queue: string;\n deleted: number;\n}\n\ninterface DeleteAllCompletedTasksErrorAction {\n type: typeof DELETE_ALL_COMPLETED_TASKS_ERROR;\n queue: string;\n error: string;\n}\n\ninterface DeleteAggregatingTaskBeginAction {\n type: typeof DELETE_AGGREGATING_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteAggregatingTaskSuccessAction {\n type: typeof DELETE_AGGREGATING_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface DeleteAggregatingTaskErrorAction {\n type: typeof DELETE_AGGREGATING_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface RunAggregatingTaskBeginAction {\n type: typeof RUN_AGGREGATING_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface RunAggregatingTaskSuccessAction {\n type: typeof RUN_AGGREGATING_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface RunAggregatingTaskErrorAction {\n type: typeof RUN_AGGREGATING_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface ArchiveAggregatingTaskBeginAction {\n type: typeof ARCHIVE_AGGREGATING_TASK_BEGIN;\n queue: string;\n taskId: string;\n}\n\ninterface ArchiveAggregatingTaskSuccessAction {\n type: typeof ARCHIVE_AGGREGATING_TASK_SUCCESS;\n queue: string;\n taskId: string;\n}\n\ninterface ArchiveAggregatingTaskErrorAction {\n type: typeof ARCHIVE_AGGREGATING_TASK_ERROR;\n queue: string;\n taskId: string;\n error: string;\n}\n\ninterface BatchDeleteAggregatingTasksBeginAction {\n type: typeof BATCH_DELETE_AGGREGATING_TASKS_BEGIN;\n queue: string;\n group: string;\n taskIds: string[];\n}\n\ninterface BatchDeleteAggregatingTasksSuccessAction {\n type: typeof BATCH_DELETE_AGGREGATING_TASKS_SUCCESS;\n queue: string;\n group: string;\n payload: BatchDeleteTasksResponse;\n}\n\ninterface BatchDeleteAggregatingTasksErrorAction {\n type: typeof BATCH_DELETE_AGGREGATING_TASKS_ERROR;\n queue: string;\n group: string;\n taskIds: string[];\n error: string;\n}\n\ninterface BatchRunAggregatingTasksBeginAction {\n type: typeof BATCH_RUN_AGGREGATING_TASKS_BEGIN;\n queue: string;\n group: string;\n taskIds: string[];\n}\n\ninterface BatchRunAggregatingTasksSuccessAction {\n type: typeof BATCH_RUN_AGGREGATING_TASKS_SUCCESS;\n queue: string;\n group: string;\n payload: BatchRunTasksResponse;\n}\n\ninterface BatchRunAggregatingTasksErrorAction {\n type: typeof BATCH_RUN_AGGREGATING_TASKS_ERROR;\n queue: string;\n group: string;\n taskIds: string[];\n error: string;\n}\n\ninterface RunAllAggregatingTasksBeginAction {\n type: typeof RUN_ALL_AGGREGATING_TASKS_BEGIN;\n queue: string;\n group: string;\n}\n\ninterface RunAllAggregatingTasksSuccessAction {\n type: typeof RUN_ALL_AGGREGATING_TASKS_SUCCESS;\n scheduled: number;\n queue: string;\n group: string;\n}\n\ninterface RunAllAggregatingTasksErrorAction {\n type: typeof RUN_ALL_AGGREGATING_TASKS_ERROR;\n queue: string;\n group: string;\n error: string;\n}\n\ninterface BatchArchiveAggregatingTasksBeginAction {\n type: typeof BATCH_ARCHIVE_AGGREGATING_TASKS_BEGIN;\n queue: string;\n group: string;\n taskIds: string[];\n}\n\ninterface BatchArchiveAggregatingTasksSuccessAction {\n type: typeof BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS;\n queue: string;\n group: string;\n payload: BatchArchiveTasksResponse;\n}\n\ninterface BatchArchiveAggregatingTasksErrorAction {\n type: typeof BATCH_ARCHIVE_AGGREGATING_TASKS_ERROR;\n queue: string;\n group: string;\n taskIds: string[];\n error: string;\n}\n\ninterface ArchiveAllAggregatingTasksBeginAction {\n type: typeof ARCHIVE_ALL_AGGREGATING_TASKS_BEGIN;\n queue: string;\n group: string;\n}\n\ninterface ArchiveAllAggregatingTasksSuccessAction {\n type: typeof ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS;\n queue: string;\n group: string;\n archived: number;\n}\n\ninterface ArchiveAllAggregatingTasksErrorAction {\n type: typeof ARCHIVE_ALL_AGGREGATING_TASKS_ERROR;\n queue: string;\n group: string;\n error: string;\n}\n\ninterface DeleteAllAggregatingTasksBeginAction {\n type: typeof DELETE_ALL_AGGREGATING_TASKS_BEGIN;\n queue: string;\n group: string;\n}\n\ninterface DeleteAllAggregatingTasksSuccessAction {\n type: typeof DELETE_ALL_AGGREGATING_TASKS_SUCCESS;\n queue: string;\n group: string;\n deleted: number;\n}\n\ninterface DeleteAllAggregatingTasksErrorAction {\n type: typeof DELETE_ALL_AGGREGATING_TASKS_ERROR;\n queue: string;\n group: string;\n error: string;\n}\n\n// Union of all tasks related action types.\nexport type TasksActionTypes =\n | GetTaskInfoBeginAction\n | GetTaskInfoErrorAction\n | GetTaskInfoSuccessAction\n | ListActiveTasksBeginAction\n | ListActiveTasksSuccessAction\n | ListActiveTasksErrorAction\n | ListPendingTasksBeginAction\n | ListPendingTasksSuccessAction\n | ListPendingTasksErrorAction\n | ListScheduledTasksBeginAction\n | ListScheduledTasksSuccessAction\n | ListScheduledTasksErrorAction\n | ListRetryTasksBeginAction\n | ListRetryTasksSuccessAction\n | ListRetryTasksErrorAction\n | ListArchivedTasksBeginAction\n | ListArchivedTasksSuccessAction\n | ListArchivedTasksErrorAction\n | ListCompletedTasksBeginAction\n | ListCompletedTasksSuccessAction\n | ListCompletedTasksErrorAction\n | ListAggregatingTasksBeginAction\n | ListAggregatingTasksSuccessAction\n | ListAggregatingTasksErrorAction\n | CancelActiveTaskBeginAction\n | CancelActiveTaskSuccessAction\n | CancelActiveTaskErrorAction\n | CancelAllActiveTasksBeginAction\n | CancelAllActiveTasksSuccessAction\n | CancelAllActiveTasksErrorAction\n | BatchCancelActiveTasksBeginAction\n | BatchCancelActiveTasksSuccessAction\n | BatchCancelActiveTasksErrorAction\n | DeletePendingTaskBeginAction\n | DeletePendingTaskSuccessAction\n | DeletePendingTaskErrorAction\n | BatchDeletePendingTasksBeginAction\n | BatchDeletePendingTasksSuccessAction\n | BatchDeletePendingTasksErrorAction\n | DeleteAllPendingTasksBeginAction\n | DeleteAllPendingTasksSuccessAction\n | DeleteAllPendingTasksErrorAction\n | ArchivePendingTaskBeginAction\n | ArchivePendingTaskSuccessAction\n | ArchivePendingTaskErrorAction\n | BatchArchivePendingTasksBeginAction\n | BatchArchivePendingTasksSuccessAction\n | BatchArchivePendingTasksErrorAction\n | ArchiveAllPendingTasksBeginAction\n | ArchiveAllPendingTasksSuccessAction\n | ArchiveAllPendingTasksErrorAction\n | RunScheduledTaskBeginAction\n | RunScheduledTaskSuccessAction\n | RunScheduledTaskErrorAction\n | RunRetryTaskBeginAction\n | RunRetryTaskSuccessAction\n | RunRetryTaskErrorAction\n | RunArchivedTaskBeginAction\n | RunArchivedTaskSuccessAction\n | RunArchivedTaskErrorAction\n | ArchiveScheduledTaskBeginAction\n | ArchiveScheduledTaskSuccessAction\n | ArchiveScheduledTaskErrorAction\n | ArchiveRetryTaskBeginAction\n | ArchiveRetryTaskSuccessAction\n | ArchiveRetryTaskErrorAction\n | DeleteScheduledTaskBeginAction\n | DeleteScheduledTaskSuccessAction\n | DeleteScheduledTaskErrorAction\n | BatchDeleteScheduledTasksBeginAction\n | BatchDeleteScheduledTasksSuccessAction\n | BatchDeleteScheduledTasksErrorAction\n | BatchRunScheduledTasksBeginAction\n | BatchRunScheduledTasksSuccessAction\n | BatchRunScheduledTasksErrorAction\n | RunAllScheduledTasksBeginAction\n | RunAllScheduledTasksSuccessAction\n | RunAllScheduledTasksErrorAction\n | BatchArchiveScheduledTasksBeginAction\n | BatchArchiveScheduledTasksSuccessAction\n | BatchArchiveScheduledTasksErrorAction\n | ArchiveAllScheduledTasksBeginAction\n | ArchiveAllScheduledTasksSuccessAction\n | ArchiveAllScheduledTasksErrorAction\n | DeleteAllScheduledTasksBeginAction\n | DeleteAllScheduledTasksSuccessAction\n | DeleteAllScheduledTasksErrorAction\n | DeleteRetryTaskBeginAction\n | DeleteRetryTaskSuccessAction\n | DeleteRetryTaskErrorAction\n | BatchDeleteRetryTasksBeginAction\n | BatchDeleteRetryTasksSuccessAction\n | BatchDeleteRetryTasksErrorAction\n | BatchRunRetryTasksBeginAction\n | BatchRunRetryTasksSuccessAction\n | BatchRunRetryTasksErrorAction\n | RunAllRetryTasksBeginAction\n | RunAllRetryTasksSuccessAction\n | RunAllRetryTasksErrorAction\n | BatchArchiveRetryTasksBeginAction\n | BatchArchiveRetryTasksSuccessAction\n | BatchArchiveRetryTasksErrorAction\n | ArchiveAllRetryTasksBeginAction\n | ArchiveAllRetryTasksSuccessAction\n | ArchiveAllRetryTasksErrorAction\n | DeleteAllRetryTasksBeginAction\n | DeleteAllRetryTasksSuccessAction\n | DeleteAllRetryTasksErrorAction\n | DeleteArchivedTaskBeginAction\n | DeleteArchivedTaskSuccessAction\n | DeleteArchivedTaskErrorAction\n | BatchDeleteArchivedTasksBeginAction\n | BatchDeleteArchivedTasksSuccessAction\n | BatchDeleteArchivedTasksErrorAction\n | BatchRunArchivedTasksBeginAction\n | BatchRunArchivedTasksSuccessAction\n | BatchRunArchivedTasksErrorAction\n | RunAllArchivedTasksBeginAction\n | RunAllArchivedTasksSuccessAction\n | RunAllArchivedTasksErrorAction\n | DeleteAllArchivedTasksBeginAction\n | DeleteAllArchivedTasksSuccessAction\n | DeleteAllArchivedTasksErrorAction\n | DeleteCompletedTaskBeginAction\n | DeleteCompletedTaskSuccessAction\n | DeleteCompletedTaskErrorAction\n | BatchDeleteCompletedTasksBeginAction\n | BatchDeleteCompletedTasksSuccessAction\n | BatchDeleteCompletedTasksErrorAction\n | DeleteAllCompletedTasksBeginAction\n | DeleteAllCompletedTasksSuccessAction\n | DeleteAllCompletedTasksErrorAction\n | BatchDeleteAggregatingTasksBeginAction\n | BatchDeleteAggregatingTasksSuccessAction\n | BatchDeleteAggregatingTasksErrorAction\n | BatchRunAggregatingTasksBeginAction\n | BatchRunAggregatingTasksSuccessAction\n | BatchRunAggregatingTasksErrorAction\n | RunAllAggregatingTasksBeginAction\n | RunAllAggregatingTasksSuccessAction\n | RunAllAggregatingTasksErrorAction\n | BatchArchiveAggregatingTasksBeginAction\n | BatchArchiveAggregatingTasksSuccessAction\n | BatchArchiveAggregatingTasksErrorAction\n | ArchiveAllAggregatingTasksBeginAction\n | ArchiveAllAggregatingTasksSuccessAction\n | ArchiveAllAggregatingTasksErrorAction\n | DeleteAllAggregatingTasksBeginAction\n | DeleteAllAggregatingTasksSuccessAction\n | DeleteAllAggregatingTasksErrorAction\n | DeleteAggregatingTaskBeginAction\n | DeleteAggregatingTaskSuccessAction\n | DeleteAggregatingTaskErrorAction\n | RunAggregatingTaskBeginAction\n | RunAggregatingTaskSuccessAction\n | RunAggregatingTaskErrorAction\n | ArchiveAggregatingTaskBeginAction\n | ArchiveAggregatingTaskSuccessAction\n | ArchiveAggregatingTaskErrorAction;\n\nexport function getTaskInfoAsync(qname: string, id: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: GET_TASK_INFO_BEGIN });\n try {\n const response = await getTaskInfo(qname, id);\n dispatch({\n type: GET_TASK_INFO_SUCCESS,\n payload: response,\n });\n } catch (error) {\n console.error(\"getTaskInfoAsync: \", toErrorStringWithHttpStatus(error));\n dispatch({\n type: GET_TASK_INFO_ERROR,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listActiveTasksAsync(\n qname: string,\n pageOpts?: PaginationOptions\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_ACTIVE_TASKS_BEGIN, queue: qname });\n try {\n const response = await listActiveTasks(qname, pageOpts);\n dispatch({\n type: LIST_ACTIVE_TASKS_SUCCESS,\n queue: qname,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listActiveTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_ACTIVE_TASKS_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listPendingTasksAsync(\n qname: string,\n pageOpts?: PaginationOptions\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_PENDING_TASKS_BEGIN, queue: qname });\n try {\n const response = await listPendingTasks(qname, pageOpts);\n dispatch({\n type: LIST_PENDING_TASKS_SUCCESS,\n queue: qname,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listPendingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_PENDING_TASKS_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listScheduledTasksAsync(\n qname: string,\n pageOpts?: PaginationOptions\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_SCHEDULED_TASKS_BEGIN, queue: qname });\n try {\n const response = await listScheduledTasks(qname, pageOpts);\n dispatch({\n type: LIST_SCHEDULED_TASKS_SUCCESS,\n queue: qname,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listScheduledTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_SCHEDULED_TASKS_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listRetryTasksAsync(\n qname: string,\n pageOpts?: PaginationOptions\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_RETRY_TASKS_BEGIN, queue: qname });\n try {\n const response = await listRetryTasks(qname, pageOpts);\n dispatch({\n type: LIST_RETRY_TASKS_SUCCESS,\n queue: qname,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listRetryTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_RETRY_TASKS_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listArchivedTasksAsync(\n qname: string,\n pageOpts?: PaginationOptions\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_ARCHIVED_TASKS_BEGIN, queue: qname });\n try {\n const response = await listArchivedTasks(qname, pageOpts);\n dispatch({\n type: LIST_ARCHIVED_TASKS_SUCCESS,\n queue: qname,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listArchivedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_ARCHIVED_TASKS_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listCompletedTasksAsync(\n qname: string,\n pageOpts?: PaginationOptions\n) {\n return async (dispatch: Dispatch) => {\n try {\n dispatch({ type: LIST_COMPLETED_TASKS_BEGIN, queue: qname });\n const response = await listCompletedTasks(qname, pageOpts);\n dispatch({\n type: LIST_COMPLETED_TASKS_SUCCESS,\n queue: qname,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listCompletedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_COMPLETED_TASKS_ERROR,\n queue: qname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function listAggregatingTasksAsync(\n qname: string,\n gname: string,\n pageOpts?: PaginationOptions\n) {\n return async (dispatch: Dispatch) => {\n try {\n dispatch({\n type: LIST_AGGREGATING_TASKS_BEGIN,\n queue: qname,\n group: gname,\n });\n const response = await listAggregatingTasks(qname, gname, pageOpts);\n dispatch({\n type: LIST_AGGREGATING_TASKS_SUCCESS,\n queue: qname,\n group: gname,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"listAggregatingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: LIST_AGGREGATING_TASKS_ERROR,\n queue: qname,\n group: gname,\n error: toErrorString(error),\n });\n }\n };\n}\n\nexport function cancelActiveTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: CANCEL_ACTIVE_TASK_BEGIN, queue, taskId });\n try {\n await cancelActiveTask(queue, taskId);\n dispatch({ type: CANCEL_ACTIVE_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"cancelActiveTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: CANCEL_ACTIVE_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function cancelAllActiveTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: CANCEL_ALL_ACTIVE_TASKS_BEGIN, queue });\n try {\n await cancelAllActiveTasks(queue);\n dispatch({ type: CANCEL_ALL_ACTIVE_TASKS_SUCCESS, queue });\n } catch (error) {\n console.error(\n \"cancelAllActiveTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: CANCEL_ALL_ACTIVE_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function batchCancelActiveTasksAsync(queue: string, taskIds: string[]) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_CANCEL_ACTIVE_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchCancelActiveTasks(queue, taskIds);\n dispatch({\n type: BATCH_CANCEL_ACTIVE_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchCancelActiveTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_CANCEL_ACTIVE_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function runScheduledTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_SCHEDULED_TASK_BEGIN, queue, taskId });\n try {\n await runScheduledTask(queue, taskId);\n dispatch({ type: RUN_SCHEDULED_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"runScheduledTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: RUN_SCHEDULED_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function runRetryTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_RETRY_TASK_BEGIN, queue, taskId });\n try {\n await runRetryTask(queue, taskId);\n dispatch({ type: RUN_RETRY_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\"runRetryTaskAsync: \", toErrorStringWithHttpStatus(error));\n dispatch({\n type: RUN_RETRY_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function archivePendingTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_PENDING_TASK_BEGIN, queue, taskId });\n try {\n await archivePendingTask(queue, taskId);\n dispatch({ type: ARCHIVE_PENDING_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"archivePendingTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_PENDING_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function archiveScheduledTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_SCHEDULED_TASK_BEGIN, queue, taskId });\n try {\n await archiveScheduledTask(queue, taskId);\n dispatch({ type: ARCHIVE_SCHEDULED_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"archiveScheduledTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_SCHEDULED_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function archiveRetryTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_RETRY_TASK_BEGIN, queue, taskId });\n try {\n await archiveRetryTask(queue, taskId);\n dispatch({ type: ARCHIVE_RETRY_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"archiveRetryTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_RETRY_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function runArchivedTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_ARCHIVED_TASK_BEGIN, queue, taskId });\n try {\n await runArchivedTask(queue, taskId);\n dispatch({ type: RUN_ARCHIVED_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"runArchivedTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: RUN_ARCHIVED_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function deletePendingTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_PENDING_TASK_BEGIN, queue, taskId });\n try {\n await deletePendingTask(queue, taskId);\n dispatch({ type: DELETE_PENDING_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"deletePendingTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_PENDING_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function batchDeletePendingTasksAsync(queue: string, taskIds: string[]) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_DELETE_PENDING_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchDeletePendingTasks(queue, taskIds);\n dispatch({\n type: BATCH_DELETE_PENDING_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchDeletePendingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_DELETE_PENDING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function deleteScheduledTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_SCHEDULED_TASK_BEGIN, queue, taskId });\n try {\n await deleteScheduledTask(queue, taskId);\n dispatch({ type: DELETE_SCHEDULED_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"deleteScheduledTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_SCHEDULED_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function batchDeleteScheduledTasksAsync(\n queue: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_DELETE_SCHEDULED_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchDeleteScheduledTasks(queue, taskIds);\n dispatch({\n type: BATCH_DELETE_SCHEDULED_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchDeleteScheduledTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_DELETE_SCHEDULED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function batchRunScheduledTasksAsync(queue: string, taskIds: string[]) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_RUN_SCHEDULED_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchRunScheduledTasks(queue, taskIds);\n dispatch({\n type: BATCH_RUN_SCHEDULED_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchRunScheduledTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_RUN_SCHEDULED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function batchArchiveScheduledTasksAsync(\n queue: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_ARCHIVE_SCHEDULED_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchArchiveScheduledTasks(queue, taskIds);\n dispatch({\n type: BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchArchiveScheduledTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_ARCHIVE_SCHEDULED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function batchArchivePendingTasksAsync(\n queue: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_ARCHIVE_PENDING_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchArchivePendingTasks(queue, taskIds);\n dispatch({\n type: BATCH_ARCHIVE_PENDING_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchArchivePendingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_ARCHIVE_PENDING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function deleteAggregatingTaskAsync(\n queue: string,\n group: string,\n taskId: string\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_AGGREGATING_TASK_BEGIN, queue, taskId });\n try {\n await deleteAggregatingTask(queue, group, taskId);\n dispatch({ type: DELETE_AGGREGATING_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"deleteAggregatingTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_AGGREGATING_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function runAggregatingTaskAsync(\n queue: string,\n group: string,\n taskId: string\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_AGGREGATING_TASK_BEGIN, queue, taskId });\n try {\n await runAggregatingTask(queue, group, taskId);\n dispatch({ type: RUN_AGGREGATING_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"runAggregatingTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: RUN_AGGREGATING_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function archiveAggregatingTaskAsync(\n queue: string,\n group: string,\n taskId: string\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_AGGREGATING_TASK_BEGIN, queue, taskId });\n try {\n await archiveAggregatingTask(queue, group, taskId);\n dispatch({ type: ARCHIVE_AGGREGATING_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"archiveAggregatingTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_AGGREGATING_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function batchArchiveAggregatingTasksAsync(\n queue: string,\n group: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({\n type: BATCH_ARCHIVE_AGGREGATING_TASKS_BEGIN,\n queue,\n group,\n taskIds,\n });\n try {\n const response = await batchArchiveAggregatingTasks(\n queue,\n group,\n taskIds\n );\n dispatch({\n type: BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS,\n payload: response,\n queue,\n group,\n });\n } catch (error) {\n console.error(\n \"batchArchiveAggregatingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_ARCHIVE_AGGREGATING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n group,\n taskIds,\n });\n }\n };\n}\n\nexport function archiveAllPendingTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_ALL_PENDING_TASKS_BEGIN, queue });\n try {\n await archiveAllPendingTasks(queue);\n dispatch({ type: ARCHIVE_ALL_PENDING_TASKS_SUCCESS, queue });\n } catch (error) {\n console.error(\n \"archiveAllPendingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_ALL_PENDING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function deleteAllPendingTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_ALL_PENDING_TASKS_BEGIN, queue });\n try {\n const response = await deleteAllPendingTasks(queue);\n dispatch({\n type: DELETE_ALL_PENDING_TASKS_SUCCESS,\n deleted: response.deleted,\n queue,\n });\n } catch (error) {\n console.error(\n \"deleteAllPendingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_ALL_PENDING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function deleteAllAggregatingTasksAsync(queue: string, group: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_ALL_AGGREGATING_TASKS_BEGIN, queue, group });\n try {\n const response = await deleteAllAggregatingTasks(queue, group);\n dispatch({\n type: DELETE_ALL_AGGREGATING_TASKS_SUCCESS,\n deleted: response.deleted,\n queue,\n group,\n });\n } catch (error) {\n console.error(\n \"deleteAllAggregatingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_ALL_AGGREGATING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n group,\n });\n }\n };\n}\n\nexport function deleteAllScheduledTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_ALL_SCHEDULED_TASKS_BEGIN, queue });\n try {\n const response = await deleteAllScheduledTasks(queue);\n dispatch({\n type: DELETE_ALL_SCHEDULED_TASKS_SUCCESS,\n deleted: response.deleted,\n queue,\n });\n } catch (error) {\n console.error(\n \"deleteAllScheduledTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_ALL_SCHEDULED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function runAllScheduledTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_ALL_SCHEDULED_TASKS_BEGIN, queue });\n try {\n await runAllScheduledTasks(queue);\n dispatch({ type: RUN_ALL_SCHEDULED_TASKS_SUCCESS, queue });\n } catch (error) {\n console.error(\n \"runAllScheduledTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: RUN_ALL_SCHEDULED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function archiveAllScheduledTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_ALL_SCHEDULED_TASKS_BEGIN, queue });\n try {\n await archiveAllScheduledTasks(queue);\n dispatch({ type: ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS, queue });\n } catch (error) {\n console.error(\n \"archiveAllScheduledTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_ALL_SCHEDULED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function archiveAllAggregatingTasksAsync(queue: string, group: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_ALL_AGGREGATING_TASKS_BEGIN, queue, group });\n try {\n const response = await archiveAllAggregatingTasks(queue, group);\n dispatch({\n type: ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS,\n archived: response.archived,\n queue,\n group,\n });\n } catch (error) {\n console.error(\n \"archiveAllAggregatingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_ALL_AGGREGATING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n group,\n });\n }\n };\n}\n\nexport function runAllAggregatingTasksAsync(queue: string, group: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_ALL_AGGREGATING_TASKS_BEGIN, queue, group });\n try {\n const resp = await runAllAggregatingTasks(queue, group);\n dispatch({\n type: RUN_ALL_AGGREGATING_TASKS_SUCCESS,\n scheduled: resp.scheduled,\n queue,\n group,\n });\n } catch (error) {\n console.error(\n \"runAllAggregatingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: RUN_ALL_AGGREGATING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n group,\n });\n }\n };\n}\n\nexport function deleteRetryTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_RETRY_TASK_BEGIN, queue, taskId });\n try {\n await deleteRetryTask(queue, taskId);\n dispatch({ type: DELETE_RETRY_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"deleteRetryTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_RETRY_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function batchDeleteRetryTasksAsync(queue: string, taskIds: string[]) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_DELETE_RETRY_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchDeleteRetryTasks(queue, taskIds);\n dispatch({\n type: BATCH_DELETE_RETRY_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchDeleteRetryTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_DELETE_RETRY_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function batchRunRetryTasksAsync(queue: string, taskIds: string[]) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_RUN_RETRY_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchRunRetryTasks(queue, taskIds);\n dispatch({\n type: BATCH_RUN_RETRY_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchRunRetryTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_RUN_RETRY_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function batchRunAggregatingTasksAsync(\n queue: string,\n group: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({\n type: BATCH_RUN_AGGREGATING_TASKS_BEGIN,\n queue,\n group,\n taskIds,\n });\n try {\n const response = await batchRunAggregatingTasks(queue, group, taskIds);\n dispatch({\n type: BATCH_RUN_AGGREGATING_TASKS_SUCCESS,\n payload: response,\n queue,\n group,\n });\n } catch (error) {\n console.error(\n \"batchRunAggregatingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_RUN_AGGREGATING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n group,\n taskIds,\n });\n }\n };\n}\n\nexport function batchArchiveRetryTasksAsync(queue: string, taskIds: string[]) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_ARCHIVE_RETRY_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchArchiveRetryTasks(queue, taskIds);\n dispatch({\n type: BATCH_ARCHIVE_RETRY_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchArchiveRetryTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_ARCHIVE_RETRY_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function deleteAllRetryTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_ALL_RETRY_TASKS_BEGIN, queue });\n try {\n const response = await deleteAllRetryTasks(queue);\n dispatch({\n type: DELETE_ALL_RETRY_TASKS_SUCCESS,\n deleted: response.deleted,\n queue,\n });\n } catch (error) {\n console.error(\n \"deleteAllRetryTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_ALL_RETRY_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function runAllRetryTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_ALL_RETRY_TASKS_BEGIN, queue });\n try {\n await runAllRetryTasks(queue);\n dispatch({ type: RUN_ALL_RETRY_TASKS_SUCCESS, queue });\n } catch (error) {\n console.error(\n \"runAllRetryTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: RUN_ALL_RETRY_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function archiveAllRetryTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: ARCHIVE_ALL_RETRY_TASKS_BEGIN, queue });\n try {\n await archiveAllRetryTasks(queue);\n dispatch({ type: ARCHIVE_ALL_RETRY_TASKS_SUCCESS, queue });\n } catch (error) {\n console.error(\n \"archiveAllRetryTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: ARCHIVE_ALL_RETRY_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function deleteArchivedTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_ARCHIVED_TASK_BEGIN, queue, taskId });\n try {\n await deleteArchivedTask(queue, taskId);\n dispatch({ type: DELETE_ARCHIVED_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"deleteArchivedTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_ARCHIVED_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function batchDeleteArchivedTasksAsync(\n queue: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_DELETE_ARCHIVED_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchDeleteArchivedTasks(queue, taskIds);\n dispatch({\n type: BATCH_DELETE_ARCHIVED_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchDeleteArchivedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_DELETE_ARCHIVED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function batchRunArchivedTasksAsync(queue: string, taskIds: string[]) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_RUN_ARCHIVED_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchRunArchivedTasks(queue, taskIds);\n dispatch({\n type: BATCH_RUN_ARCHIVED_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchRunArchivedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_RUN_ARCHIVED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function deleteAllArchivedTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_ALL_ARCHIVED_TASKS_BEGIN, queue });\n try {\n const response = await deleteAllArchivedTasks(queue);\n dispatch({\n type: DELETE_ALL_ARCHIVED_TASKS_SUCCESS,\n deleted: response.deleted,\n queue,\n });\n } catch (error) {\n console.error(\n \"deleteAllArchivedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_ALL_ARCHIVED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function runAllArchivedTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: RUN_ALL_ARCHIVED_TASKS_BEGIN, queue });\n try {\n await runAllArchivedTasks(queue);\n dispatch({ type: RUN_ALL_ARCHIVED_TASKS_SUCCESS, queue });\n } catch (error) {\n console.error(\n \"runAllArchivedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: RUN_ALL_ARCHIVED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n\nexport function deleteCompletedTaskAsync(queue: string, taskId: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_COMPLETED_TASK_BEGIN, queue, taskId });\n try {\n await deleteCompletedTask(queue, taskId);\n dispatch({ type: DELETE_COMPLETED_TASK_SUCCESS, queue, taskId });\n } catch (error) {\n console.error(\n \"deleteCompletedTaskAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_COMPLETED_TASK_ERROR,\n error: toErrorString(error),\n queue,\n taskId,\n });\n }\n };\n}\n\nexport function batchDeleteCompletedTasksAsync(\n queue: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: BATCH_DELETE_COMPLETED_TASKS_BEGIN, queue, taskIds });\n try {\n const response = await batchDeleteCompletedTasks(queue, taskIds);\n dispatch({\n type: BATCH_DELETE_COMPLETED_TASKS_SUCCESS,\n queue: queue,\n payload: response,\n });\n } catch (error) {\n console.error(\n \"batchDeleteCompletedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_DELETE_COMPLETED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n taskIds,\n });\n }\n };\n}\n\nexport function batchDeleteAggregatingTasksAsync(\n queue: string,\n group: string,\n taskIds: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({\n type: BATCH_DELETE_AGGREGATING_TASKS_BEGIN,\n queue,\n group,\n taskIds,\n });\n try {\n const response = await batchDeleteAggregatingTasks(queue, group, taskIds);\n dispatch({\n type: BATCH_DELETE_AGGREGATING_TASKS_SUCCESS,\n payload: response,\n queue,\n group,\n });\n } catch (error) {\n console.error(\n \"batchDeleteAggregatingTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: BATCH_DELETE_AGGREGATING_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n group,\n taskIds,\n });\n }\n };\n}\n\nexport function deleteAllCompletedTasksAsync(queue: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: DELETE_ALL_COMPLETED_TASKS_BEGIN, queue });\n try {\n const response = await deleteAllCompletedTasks(queue);\n dispatch({\n type: DELETE_ALL_COMPLETED_TASKS_SUCCESS,\n deleted: response.deleted,\n queue,\n });\n } catch (error) {\n console.error(\n \"deleteAllCompletedTasksAsync: \",\n toErrorStringWithHttpStatus(error)\n );\n dispatch({\n type: DELETE_ALL_COMPLETED_TASKS_ERROR,\n error: toErrorString(error),\n queue,\n });\n }\n };\n}\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\n\nconst useStyles = makeStyles((theme) => ({\n actionsContainer: {\n display: \"flex\",\n padding: \"4px\",\n },\n moreIcon: {\n marginRight: \"8px\",\n },\n iconGroup: {\n paddingLeft: theme.spacing(1),\n borderLeft: `1px solid ${theme.palette.grey[100]}`,\n },\n}));\n\ninterface MenuItemAction {\n label: string;\n onClick: () => void;\n disabled: boolean;\n}\n\ninterface IconButtonAction {\n icon: React.ReactElement;\n tooltip: string;\n onClick: () => void;\n disabled: boolean;\n}\n\ninterface Props {\n menuItemActions: MenuItemAction[];\n iconButtonActions: IconButtonAction[];\n showIconButtons: boolean;\n}\n\nexport default function TableActions(props: Props) {\n const classes = useStyles();\n const [menuAnchor, setMenuAnchor] = useState(null);\n\n const handleMenuClick = (event: React.MouseEvent) => {\n setMenuAnchor(event.currentTarget);\n };\n\n const closeMenu = () => setMenuAnchor(null);\n\n return (\n
    \n \n \n \n \n \n \n {props.menuItemActions.map((action) => (\n {\n action.onClick();\n closeMenu();\n }}\n disabled={action.disabled}\n >\n {action.label}\n \n ))}\n \n {props.showIconButtons && (\n
    \n {props.iconButtonActions.map((action) => (\n \n \n {action.icon}\n \n \n ))}\n
    \n )}\n
    \n );\n}\n","import React, { useState, useCallback } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableFooter from \"@material-ui/core/TableFooter\";\nimport TablePagination from \"@material-ui/core/TablePagination\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport ArchiveIcon from \"@material-ui/icons/Archive\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport TablePaginationActions, {\n rowsPerPageOptions,\n} from \"./TablePaginationActions\";\nimport TableActions from \"./TableActions\";\nimport { usePolling } from \"../hooks\";\nimport { TaskInfoExtended } from \"../reducers/tasksReducer\";\nimport { TableColumn } from \"../types/table\";\nimport { PaginationOptions } from \"../api\";\nimport { TaskState } from \"../types/taskState\";\n\nconst useStyles = makeStyles((theme) => ({\n table: {\n minWidth: 650,\n },\n stickyHeaderCell: {\n background: theme.palette.background.paper,\n },\n alert: {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n pagination: {\n border: \"none\",\n },\n}));\n\ninterface Props {\n queue: string; // name of the queue.\n totalTaskCount: number; // totoal number of tasks in the given state.\n taskState: TaskState;\n loading: boolean;\n error: string;\n tasks: TaskInfoExtended[];\n batchActionPending: boolean;\n allActionPending: boolean;\n pollInterval: number;\n pageSize: number;\n columns: TableColumn[];\n\n // actions\n listTasks: (qname: string, pgn: PaginationOptions) => void;\n batchDeleteTasks?: (qname: string, taskIds: string[]) => Promise;\n batchRunTasks?: (qname: string, taskIds: string[]) => Promise;\n batchArchiveTasks?: (qname: string, taskIds: string[]) => Promise;\n batchCancelTasks?: (qname: string, taskIds: string[]) => Promise;\n deleteAllTasks?: (qname: string) => Promise;\n runAllTasks?: (qname: string) => Promise;\n archiveAllTasks?: (qname: string) => Promise;\n cancelAllTasks?: (qname: string) => Promise;\n deleteTask?: (qname: string, taskId: string) => Promise;\n runTask?: (qname: string, taskId: string) => Promise;\n archiveTask?: (qname: string, taskId: string) => Promise;\n cancelTask?: (qname: string, taskId: string) => Promise;\n taskRowsPerPageChange: (n: number) => void;\n\n renderRow: (rowProps: RowProps) => JSX.Element;\n}\n\nexport default function TasksTable(props: Props) {\n const { pollInterval, listTasks, queue, pageSize } = props;\n const classes = useStyles();\n const [page, setPage] = useState(0);\n const [selectedIds, setSelectedIds] = useState([]);\n const [activeTaskId, setActiveTaskId] = useState(\"\");\n\n const handlePageChange = (\n event: React.MouseEvent | null,\n newPage: number\n ) => {\n setPage(newPage);\n };\n\n const handleRowsPerPageChange = (\n event: React.ChangeEvent\n ) => {\n props.taskRowsPerPageChange(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n const handleSelectAllClick = (event: React.ChangeEvent) => {\n if (event.target.checked) {\n const newSelected = props.tasks.map((t) => t.id);\n setSelectedIds(newSelected);\n } else {\n setSelectedIds([]);\n }\n };\n\n function createAllActionHandler(action: (qname: string) => Promise) {\n return () => action(queue);\n }\n\n function createBatchActionHandler(\n action: (qname: string, taskIds: string[]) => Promise\n ) {\n return () => action(queue, selectedIds).then(() => setSelectedIds([]));\n }\n\n function createSingleActionHandler(\n action: (qname: string, taskId: string) => Promise,\n taskId: string\n ) {\n return () => action(queue, taskId);\n }\n\n let allActions = [];\n if (props.deleteAllTasks) {\n allActions.push({\n label: \"Delete All\",\n onClick: createAllActionHandler(props.deleteAllTasks),\n disabled: props.allActionPending,\n });\n }\n if (props.archiveAllTasks) {\n allActions.push({\n label: \"Archive All\",\n onClick: createAllActionHandler(props.archiveAllTasks),\n disabled: props.allActionPending,\n });\n }\n if (props.runAllTasks) {\n allActions.push({\n label: \"Run All\",\n onClick: createAllActionHandler(props.runAllTasks),\n disabled: props.allActionPending,\n });\n }\n if (props.cancelAllTasks) {\n allActions.push({\n label: \"Cancel All\",\n onClick: createAllActionHandler(props.cancelAllTasks),\n disabled: props.allActionPending,\n });\n }\n\n let batchActions = [];\n if (props.batchDeleteTasks) {\n batchActions.push({\n tooltip: \"Delete\",\n icon: ,\n disabled: props.batchActionPending,\n onClick: createBatchActionHandler(props.batchDeleteTasks),\n });\n }\n if (props.batchArchiveTasks) {\n batchActions.push({\n tooltip: \"Archive\",\n icon: ,\n disabled: props.batchActionPending,\n onClick: createBatchActionHandler(props.batchArchiveTasks),\n });\n }\n if (props.batchRunTasks) {\n batchActions.push({\n tooltip: \"Run\",\n icon: ,\n disabled: props.batchActionPending,\n onClick: createBatchActionHandler(props.batchRunTasks),\n });\n }\n if (props.batchCancelTasks) {\n batchActions.push({\n tooltip: \"Cancel\",\n icon: ,\n disabled: props.batchActionPending,\n onClick: createBatchActionHandler(props.batchCancelTasks),\n });\n }\n\n const fetchData = useCallback(() => {\n const pageOpts = { page: page + 1, size: pageSize };\n listTasks(queue, pageOpts);\n }, [page, pageSize, queue, listTasks]);\n\n usePolling(fetchData, pollInterval);\n\n if (props.error.length > 0) {\n return (\n \n Error\n {props.error}\n \n );\n }\n if (props.tasks.length === 0) {\n return (\n \n Info\n {props.taskState === \"aggregating\" ? (\n
    Selected group is empty.
    \n ) : (\n
    No {props.taskState} tasks at this time.
    \n )}\n
    \n );\n }\n\n const rowCount = props.tasks.length;\n const numSelected = selectedIds.length;\n return (\n
    \n {!window.READ_ONLY && (\n 0}\n iconButtonActions={batchActions}\n menuItemActions={allActions}\n />\n )}\n \n \n \n \n {!window.READ_ONLY && (\n \n \n 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={handleSelectAllClick}\n inputProps={{\n \"aria-label\": \"select all tasks shown in the table\",\n }}\n />\n \n \n )}\n {props.columns\n .filter((col) => {\n // Filter out actions column in readonly mode.\n return !window.READ_ONLY || col.key !== \"actions\";\n })\n .map((col) => (\n \n {col.label}\n \n ))}\n \n \n \n {props.tasks.map((task) => {\n return props.renderRow({\n key: task.id,\n task: task,\n allActionPending: props.allActionPending,\n isSelected: selectedIds.includes(task.id),\n onSelectChange: (checked: boolean) => {\n if (checked) {\n setSelectedIds(selectedIds.concat(task.id));\n } else {\n setSelectedIds(selectedIds.filter((id) => id !== task.id));\n }\n },\n onRunClick: props.runTask\n ? createSingleActionHandler(props.runTask, task.id)\n : undefined,\n onDeleteClick: props.deleteTask\n ? createSingleActionHandler(props.deleteTask, task.id)\n : undefined,\n onArchiveClick: props.archiveTask\n ? createSingleActionHandler(props.archiveTask, task.id)\n : undefined,\n onCancelClick: props.cancelTask\n ? createSingleActionHandler(props.cancelTask, task.id)\n : undefined,\n onActionCellEnter: () => setActiveTaskId(task.id),\n onActionCellLeave: () => setActiveTaskId(\"\"),\n showActions: activeTaskId === task.id,\n });\n })}\n \n \n \n \n \n \n \n \n
    \n );\n}\n\nexport const useRowStyles = makeStyles((theme) => ({\n root: {\n cursor: \"pointer\",\n \"& #copy-button\": {\n display: \"none\",\n },\n \"&:hover\": {\n boxShadow: theme.shadows[2],\n \"& #copy-button\": {\n display: \"inline-block\",\n },\n },\n \"&:hover $copyButton\": {\n display: \"inline-block\",\n },\n \"&:hover .MuiTableCell-root\": {\n borderBottomColor: theme.palette.background.paper,\n },\n },\n actionCell: {\n width: \"140px\",\n },\n actionButton: {\n marginLeft: 3,\n marginRight: 3,\n },\n idCell: {\n width: \"200px\",\n },\n copyButton: {\n display: \"none\",\n },\n IdGroup: {\n display: \"flex\",\n alignItems: \"center\",\n },\n}));\n\nexport interface RowProps {\n key: string;\n task: TaskInfoExtended;\n isSelected: boolean;\n onSelectChange: (checked: boolean) => void;\n onRunClick?: () => void;\n onDeleteClick?: () => void;\n onArchiveClick?: () => void;\n onCancelClick?: () => void;\n allActionPending: boolean;\n showActions: boolean;\n onActionCellEnter: () => void;\n onActionCellLeave: () => void;\n}\n","import Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { taskRowsPerPageChange } from \"../actions/settingsActions\";\nimport {\n batchCancelActiveTasksAsync,\n cancelActiveTaskAsync,\n cancelAllActiveTasksAsync,\n listActiveTasksAsync,\n} from \"../actions/tasksActions\";\nimport { taskDetailsPath } from \"../paths\";\nimport { AppState } from \"../store\";\nimport { TableColumn } from \"../types/table\";\nimport { durationBefore, prettifyPayload, timeAgo, uuidPrefix } from \"../utils\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport TasksTable, { RowProps, useRowStyles } from \"./TasksTable\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.tasks.activeTasks.loading,\n error: state.tasks.activeTasks.error,\n tasks: state.tasks.activeTasks.data,\n batchActionPending: state.tasks.activeTasks.batchActionPending,\n allActionPending: state.tasks.activeTasks.allActionPending,\n pollInterval: state.settings.pollInterval,\n pageSize: state.settings.taskRowsPerPage,\n };\n}\n\nconst mapDispatchToProps = {\n listTasks: listActiveTasksAsync,\n cancelTask: cancelActiveTaskAsync,\n batchCancelTasks: batchCancelActiveTasksAsync,\n cancelAllTasks: cancelAllActiveTasksAsync,\n taskRowsPerPageChange,\n};\n\nconst columns: TableColumn[] = [\n { key: \"id\", label: \"ID\", align: \"left\" },\n { key: \"type\", label: \"Type\", align: \"left\" },\n { key: \"payload\", label: \"Payload\", align: \"left\" },\n { key: \"status\", label: \"Status\", align: \"left\" },\n { key: \"start-time\", label: \"Started\", align: \"left\" },\n { key: \"deadline\", label: \"Deadline\", align: \"left\" },\n { key: \"actions\", label: \"Actions\", align: \"center\" },\n];\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string; // name of the queue\n totalTaskCount: number; // total number of active tasks\n}\n\nfunction Row(props: RowProps) {\n const { task } = props;\n const classes = useRowStyles();\n const history = useHistory();\n return (\n history.push(taskDetailsPath(task.queue, task.id))}\n >\n {!window.READ_ONLY && (\n e.stopPropagation()}>\n \n ) =>\n props.onSelectChange(event.target.checked)\n }\n checked={props.isSelected}\n />\n \n \n )}\n \n
    \n {uuidPrefix(task.id)}\n \n {\n e.stopPropagation();\n navigator.clipboard.writeText(task.id);\n }}\n size=\"small\"\n className={classes.copyButton}\n >\n \n \n \n
    \n
    \n {task.type}\n \n \n {prettifyPayload(task.payload)}\n \n \n \n {task.canceling\n ? \"Canceling\"\n : task.is_orphaned\n ? \"Orphaned\"\n : \"Running\"}\n \n \n {task.is_orphaned\n ? \"-\"\n : task.start_time === \"-\"\n ? \"just now\"\n : timeAgo(task.start_time)}\n \n \n {task.deadline === \"-\" ? \"-\" : durationBefore(task.deadline)}\n \n {!window.READ_ONLY && (\n e.stopPropagation()}\n >\n {props.showActions ? (\n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction ActiveTasksTable(props: Props & ReduxProps) {\n return (\n }\n {...props}\n />\n );\n}\n\nexport default connector(ActiveTasksTable);\n","import Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport ArchiveIcon from \"@material-ui/icons/Archive\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { taskRowsPerPageChange } from \"../actions/settingsActions\";\nimport {\n archiveAllPendingTasksAsync,\n archivePendingTaskAsync,\n batchArchivePendingTasksAsync,\n batchDeletePendingTasksAsync,\n deleteAllPendingTasksAsync,\n deletePendingTaskAsync,\n listPendingTasksAsync,\n} from \"../actions/tasksActions\";\nimport { taskDetailsPath } from \"../paths\";\nimport { AppState } from \"../store\";\nimport { TableColumn } from \"../types/table\";\nimport { prettifyPayload, uuidPrefix } from \"../utils\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport TasksTable, { RowProps, useRowStyles } from \"./TasksTable\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.tasks.pendingTasks.loading,\n error: state.tasks.pendingTasks.error,\n tasks: state.tasks.pendingTasks.data,\n batchActionPending: state.tasks.pendingTasks.batchActionPending,\n allActionPending: state.tasks.pendingTasks.allActionPending,\n pollInterval: state.settings.pollInterval,\n pageSize: state.settings.taskRowsPerPage,\n };\n}\n\nconst mapDispatchToProps = {\n listTasks: listPendingTasksAsync,\n deleteTask: deletePendingTaskAsync,\n batchDeleteTasks: batchDeletePendingTasksAsync,\n deleteAllTasks: deleteAllPendingTasksAsync,\n archiveTask: archivePendingTaskAsync,\n batchArchiveTasks: batchArchivePendingTasksAsync,\n archiveAllTasks: archiveAllPendingTasksAsync,\n taskRowsPerPageChange,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string;\n totalTaskCount: number; // total number of pending tasks\n}\n\nconst columns: TableColumn[] = [\n { key: \"id\", label: \"ID\", align: \"left\" },\n { key: \"type\", label: \"Type\", align: \"left\" },\n { key: \"paylod\", label: \"Payload\", align: \"left\" },\n { key: \"retried\", label: \"Retried\", align: \"right\" },\n { key: \"max_retry\", label: \"Max Retry\", align: \"right\" },\n { key: \"actions\", label: \"Actions\", align: \"center\" },\n];\n\nfunction Row(props: RowProps) {\n const { task } = props;\n const classes = useRowStyles();\n const history = useHistory();\n return (\n history.push(taskDetailsPath(task.queue, task.id))}\n >\n {!window.READ_ONLY && (\n e.stopPropagation()}>\n \n ) =>\n props.onSelectChange(event.target.checked)\n }\n checked={props.isSelected}\n />\n \n \n )}\n \n
    \n {uuidPrefix(task.id)}\n \n {\n e.stopPropagation();\n navigator.clipboard.writeText(task.id);\n }}\n size=\"small\"\n className={classes.copyButton}\n >\n \n \n \n
    \n
    \n {task.type}\n \n \n {prettifyPayload(task.payload)}\n \n \n {task.retried}\n {task.max_retry}\n {!window.READ_ONLY && (\n e.stopPropagation()}\n >\n {props.showActions ? (\n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction PendingTasksTable(props: Props & ReduxProps) {\n return (\n }\n {...props}\n />\n );\n}\n\nexport default connector(PendingTasksTable);\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport ArchiveIcon from \"@material-ui/icons/Archive\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport TasksTable, { RowProps, useRowStyles } from \"./TasksTable\";\nimport {\n batchDeleteScheduledTasksAsync,\n batchRunScheduledTasksAsync,\n batchArchiveScheduledTasksAsync,\n deleteAllScheduledTasksAsync,\n runAllScheduledTasksAsync,\n archiveAllScheduledTasksAsync,\n listScheduledTasksAsync,\n deleteScheduledTaskAsync,\n runScheduledTaskAsync,\n archiveScheduledTaskAsync,\n} from \"../actions/tasksActions\";\nimport { taskRowsPerPageChange } from \"../actions/settingsActions\";\nimport { AppState } from \"../store\";\nimport { TableColumn } from \"../types/table\";\nimport { durationBefore, prettifyPayload, uuidPrefix } from \"../utils\";\nimport { taskDetailsPath } from \"../paths\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.tasks.scheduledTasks.loading,\n error: state.tasks.scheduledTasks.error,\n tasks: state.tasks.scheduledTasks.data,\n batchActionPending: state.tasks.scheduledTasks.batchActionPending,\n allActionPending: state.tasks.scheduledTasks.allActionPending,\n pollInterval: state.settings.pollInterval,\n pageSize: state.settings.taskRowsPerPage,\n };\n}\n\nconst mapDispatchToProps = {\n listTasks: listScheduledTasksAsync,\n batchDeleteTasks: batchDeleteScheduledTasksAsync,\n batchRunTasks: batchRunScheduledTasksAsync,\n batchArchiveTasks: batchArchiveScheduledTasksAsync,\n deleteAllTasks: deleteAllScheduledTasksAsync,\n runAllTasks: runAllScheduledTasksAsync,\n archiveAllTasks: archiveAllScheduledTasksAsync,\n deleteTask: deleteScheduledTaskAsync,\n runTask: runScheduledTaskAsync,\n archiveTask: archiveScheduledTaskAsync,\n taskRowsPerPageChange,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string; // name of the queue.\n totalTaskCount: number; // totoal number of scheduled tasks.\n}\n\nconst columns: TableColumn[] = [\n { key: \"id\", label: \"ID\", align: \"left\" },\n { key: \"type\", label: \"Type\", align: \"left\" },\n { key: \"payload\", label: \"Payload\", align: \"left\" },\n { key: \"process_in\", label: \"Process In\", align: \"left\" },\n { key: \"actions\", label: \"Actions\", align: \"center\" },\n];\n\nfunction Row(props: RowProps) {\n const { task } = props;\n const classes = useRowStyles();\n const history = useHistory();\n return (\n history.push(taskDetailsPath(task.queue, task.id))}\n >\n {!window.READ_ONLY && (\n e.stopPropagation()}>\n \n ) =>\n props.onSelectChange(event.target.checked)\n }\n checked={props.isSelected}\n />\n \n \n )}\n \n
    \n {uuidPrefix(task.id)}\n \n {\n e.stopPropagation();\n navigator.clipboard.writeText(task.id);\n }}\n size=\"small\"\n className={classes.copyButton}\n >\n \n \n \n
    \n
    \n {task.type}\n \n \n {prettifyPayload(task.payload)}\n \n \n {durationBefore(task.next_process_at)}\n {!window.READ_ONLY && (\n e.stopPropagation()}\n >\n {props.showActions ? (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction ScheduledTasksTable(props: Props & ReduxProps) {\n return (\n }\n {...props}\n />\n );\n}\n\nexport default connector(ScheduledTasksTable);\n","import Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport ArchiveIcon from \"@material-ui/icons/Archive\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\nimport React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { taskRowsPerPageChange } from \"../actions/settingsActions\";\nimport {\n archiveAllRetryTasksAsync,\n archiveRetryTaskAsync,\n batchArchiveRetryTasksAsync,\n batchDeleteRetryTasksAsync,\n batchRunRetryTasksAsync,\n deleteAllRetryTasksAsync,\n deleteRetryTaskAsync,\n listRetryTasksAsync,\n runAllRetryTasksAsync,\n runRetryTaskAsync,\n} from \"../actions/tasksActions\";\nimport TasksTable, { RowProps, useRowStyles } from \"./TasksTable\";\nimport { taskDetailsPath } from \"../paths\";\nimport { AppState } from \"../store\";\nimport { TableColumn } from \"../types/table\";\nimport { durationBefore, prettifyPayload, uuidPrefix } from \"../utils\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.tasks.retryTasks.loading,\n error: state.tasks.retryTasks.error,\n tasks: state.tasks.retryTasks.data,\n batchActionPending: state.tasks.retryTasks.batchActionPending,\n allActionPending: state.tasks.retryTasks.allActionPending,\n pollInterval: state.settings.pollInterval,\n pageSize: state.settings.taskRowsPerPage,\n };\n}\n\nconst mapDispatchToProps = {\n batchDeleteTasks: batchDeleteRetryTasksAsync,\n batchRunTasks: batchRunRetryTasksAsync,\n batchArchiveTasks: batchArchiveRetryTasksAsync,\n deleteAllTasks: deleteAllRetryTasksAsync,\n runAllTasks: runAllRetryTasksAsync,\n archiveAllTasks: archiveAllRetryTasksAsync,\n listTasks: listRetryTasksAsync,\n deleteTask: deleteRetryTaskAsync,\n runTask: runRetryTaskAsync,\n archiveTask: archiveRetryTaskAsync,\n taskRowsPerPageChange,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string; // name of the queue.\n totalTaskCount: number; // totoal number of scheduled tasks.\n}\n\nconst columns: TableColumn[] = [\n { key: \"id\", label: \"ID\", align: \"left\" },\n { key: \"type\", label: \"Type\", align: \"left\" },\n { key: \"payload\", label: \"Payload\", align: \"left\" },\n { key: \"retry_in\", label: \"Retry In\", align: \"left\" },\n { key: \"last_error\", label: \"Last Error\", align: \"left\" },\n { key: \"retried\", label: \"Retried\", align: \"right\" },\n { key: \"max_retry\", label: \"Max Retry\", align: \"right\" },\n { key: \"actions\", label: \"Actions\", align: \"center\" },\n];\n\nfunction Row(props: RowProps) {\n const { task } = props;\n const classes = useRowStyles();\n const history = useHistory();\n\n return (\n history.push(taskDetailsPath(task.queue, task.id))}\n >\n {!window.READ_ONLY && (\n e.stopPropagation()}>\n \n ) =>\n props.onSelectChange(event.target.checked)\n }\n checked={props.isSelected}\n />\n \n \n )}\n \n
    \n {uuidPrefix(task.id)}\n \n {\n e.stopPropagation();\n navigator.clipboard.writeText(task.id);\n }}\n size=\"small\"\n className={classes.copyButton}\n >\n \n \n \n
    \n
    \n {task.type}\n \n \n {prettifyPayload(task.payload)}\n \n \n {durationBefore(task.next_process_at)}\n {task.error_message}\n {task.retried}\n {task.max_retry}\n {!window.READ_ONLY && (\n e.stopPropagation()}\n >\n {props.showActions ? (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction RetryTasksTable(props: Props & ReduxProps) {\n return (\n }\n {...props}\n />\n );\n}\n\nexport default connector(RetryTasksTable);\n","import Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\nimport React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { taskRowsPerPageChange } from \"../actions/settingsActions\";\nimport {\n batchDeleteArchivedTasksAsync,\n batchRunArchivedTasksAsync,\n deleteAllArchivedTasksAsync,\n deleteArchivedTaskAsync,\n listArchivedTasksAsync,\n runAllArchivedTasksAsync,\n runArchivedTaskAsync,\n} from \"../actions/tasksActions\";\nimport { taskDetailsPath } from \"../paths\";\nimport { AppState } from \"../store\";\nimport { TableColumn } from \"../types/table\";\nimport { prettifyPayload, timeAgo, uuidPrefix } from \"../utils\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport TasksTable, { RowProps, useRowStyles } from \"./TasksTable\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.tasks.archivedTasks.loading,\n error: state.tasks.archivedTasks.error,\n tasks: state.tasks.archivedTasks.data,\n batchActionPending: state.tasks.archivedTasks.batchActionPending,\n allActionPending: state.tasks.archivedTasks.allActionPending,\n pollInterval: state.settings.pollInterval,\n pageSize: state.settings.taskRowsPerPage,\n };\n}\n\nconst mapDispatchToProps = {\n listTasks: listArchivedTasksAsync,\n runTask: runArchivedTaskAsync,\n runAllTasks: runAllArchivedTasksAsync,\n deleteTask: deleteArchivedTaskAsync,\n deleteAllTasks: deleteAllArchivedTasksAsync,\n batchRunTasks: batchRunArchivedTasksAsync,\n batchDeleteTasks: batchDeleteArchivedTasksAsync,\n taskRowsPerPageChange,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string; // name of the queue.\n totalTaskCount: number; // totoal number of archived tasks.\n}\n\nconst columns: TableColumn[] = [\n { key: \"id\", label: \"ID\", align: \"left\" },\n { key: \"type\", label: \"Type\", align: \"left\" },\n { key: \"payload\", label: \"Payload\", align: \"left\" },\n { key: \"last_failed\", label: \"Last Failed\", align: \"left\" },\n { key: \"last_error\", label: \"Last Error\", align: \"left\" },\n { key: \"actions\", label: \"Actions\", align: \"center\" },\n];\n\nfunction Row(props: RowProps) {\n const { task } = props;\n const classes = useRowStyles();\n const history = useHistory();\n return (\n history.push(taskDetailsPath(task.queue, task.id))}\n >\n {!window.READ_ONLY && (\n e.stopPropagation()}>\n \n ) =>\n props.onSelectChange(event.target.checked)\n }\n checked={props.isSelected}\n />\n \n \n )}\n \n
    \n {uuidPrefix(task.id)}\n \n {\n e.stopPropagation();\n navigator.clipboard.writeText(task.id);\n }}\n size=\"small\"\n className={classes.copyButton}\n >\n \n \n \n
    \n
    \n {task.type}\n \n \n {prettifyPayload(task.payload)}\n \n \n {timeAgo(task.last_failed_at)}\n {task.error_message}\n {!window.READ_ONLY && (\n e.stopPropagation()}\n >\n {props.showActions ? (\n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction ArchivedTasksTable(props: Props & ReduxProps) {\n return (\n }\n {...props}\n />\n );\n}\n\nexport default connector(ArchivedTasksTable);\n","import Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { taskRowsPerPageChange } from \"../actions/settingsActions\";\nimport {\n batchDeleteCompletedTasksAsync,\n deleteAllCompletedTasksAsync,\n deleteCompletedTaskAsync,\n listCompletedTasksAsync,\n} from \"../actions/tasksActions\";\nimport { taskDetailsPath } from \"../paths\";\nimport { AppState } from \"../store\";\nimport { TableColumn } from \"../types/table\";\nimport {\n durationFromSeconds,\n prettifyPayload,\n stringifyDuration,\n timeAgo,\n uuidPrefix,\n} from \"../utils\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport TasksTable, { RowProps, useRowStyles } from \"./TasksTable\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.tasks.completedTasks.loading,\n error: state.tasks.completedTasks.error,\n tasks: state.tasks.completedTasks.data,\n batchActionPending: state.tasks.completedTasks.batchActionPending,\n allActionPending: state.tasks.completedTasks.allActionPending,\n pollInterval: state.settings.pollInterval,\n pageSize: state.settings.taskRowsPerPage,\n };\n}\n\nconst mapDispatchToProps = {\n listTasks: listCompletedTasksAsync,\n deleteTask: deleteCompletedTaskAsync,\n deleteAllTasks: deleteAllCompletedTasksAsync,\n batchDeleteTasks: batchDeleteCompletedTasksAsync,\n taskRowsPerPageChange,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string; // name of the queue.\n totalTaskCount: number; // totoal number of completed tasks.\n}\n\nconst columns: TableColumn[] = [\n { key: \"id\", label: \"ID\", align: \"left\" },\n { key: \"type\", label: \"Type\", align: \"left\" },\n { key: \"payload\", label: \"Payload\", align: \"left\" },\n { key: \"completed_at\", label: \"Completed\", align: \"left\" },\n { key: \"result\", label: \"Result\", align: \"left\" },\n { key: \"ttl\", label: \"TTL\", align: \"left\" },\n { key: \"actions\", label: \"Actions\", align: \"center\" },\n];\n\nfunction Row(props: RowProps) {\n const { task } = props;\n const classes = useRowStyles();\n const history = useHistory();\n return (\n history.push(taskDetailsPath(task.queue, task.id))}\n >\n {!window.READ_ONLY && (\n e.stopPropagation()}>\n \n ) =>\n props.onSelectChange(event.target.checked)\n }\n checked={props.isSelected}\n />\n \n \n )}\n \n
    \n {uuidPrefix(task.id)}\n \n {\n e.stopPropagation();\n navigator.clipboard.writeText(task.id);\n }}\n size=\"small\"\n className={classes.copyButton}\n >\n \n \n \n
    \n
    \n {task.type}\n \n \n {prettifyPayload(task.payload)}\n \n \n {timeAgo(task.completed_at)}\n \n \n {prettifyPayload(task.result)}\n \n \n \n {task.ttl_seconds > 0\n ? `${stringifyDuration(durationFromSeconds(task.ttl_seconds))} left`\n : `expired`}\n \n {!window.READ_ONLY && (\n e.stopPropagation()}\n >\n {props.showActions ? (\n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction CompletedTasksTable(props: Props & ReduxProps) {\n return (\n }\n {...props}\n />\n );\n}\nexport default connector(CompletedTasksTable);\n","import { Dispatch } from \"redux\";\nimport { listGroups, ListGroupsResponse } from \"../api\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\n// List of groups related action types.\nexport const LIST_GROUPS_BEGIN = \"LIST_GROUPS_BEGIN\";\nexport const LIST_GROUPS_SUCCESS = \"LIST_GROUPS_SUCCESS\";\nexport const LIST_GROUPS_ERROR = \"LIST_GROUPS_ERROR\";\n\ninterface ListGroupsBeginAction {\n type: typeof LIST_GROUPS_BEGIN;\n queue: string;\n}\n\ninterface ListGroupsSuccessAction {\n type: typeof LIST_GROUPS_SUCCESS;\n payload: ListGroupsResponse;\n queue: string;\n}\n\ninterface ListGroupsErrorAction {\n type: typeof LIST_GROUPS_ERROR;\n queue: string;\n error: string;\n}\n\n// Union of all groups related action types.\nexport type GroupsActionTypes =\n | ListGroupsBeginAction\n | ListGroupsSuccessAction\n | ListGroupsErrorAction;\n\nexport function listGroupsAsync(qname: string) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_GROUPS_BEGIN, queue: qname });\n try {\n const response = await listGroups(qname);\n dispatch({\n type: LIST_GROUPS_SUCCESS,\n payload: response,\n queue: qname,\n });\n } catch (error) {\n console.error(`listGroupsAsync: ${toErrorStringWithHttpStatus(error)}`);\n dispatch({\n type: LIST_GROUPS_ERROR,\n error: toErrorString(error),\n queue: qname,\n });\n }\n };\n}\n","import Checkbox from \"@material-ui/core/Checkbox\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport ArchiveIcon from \"@material-ui/icons/Archive\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport MoreHorizIcon from \"@material-ui/icons/MoreHoriz\";\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\nimport React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { taskRowsPerPageChange } from \"../actions/settingsActions\";\nimport {\n archiveAggregatingTaskAsync,\n archiveAllAggregatingTasksAsync,\n batchArchiveAggregatingTasksAsync,\n batchDeleteAggregatingTasksAsync,\n batchRunAggregatingTasksAsync,\n deleteAggregatingTaskAsync,\n deleteAllAggregatingTasksAsync,\n listAggregatingTasksAsync,\n runAggregatingTaskAsync,\n runAllAggregatingTasksAsync,\n} from \"../actions/tasksActions\";\nimport { PaginationOptions } from \"../api\";\nimport { taskDetailsPath } from \"../paths\";\nimport { AppState } from \"../store\";\nimport { TableColumn } from \"../types/table\";\nimport { prettifyPayload, uuidPrefix } from \"../utils\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport TasksTable, { RowProps, useRowStyles } from \"./TasksTable\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n groups: state.groups.data,\n groupsError: state.groups.error,\n loading: state.tasks.aggregatingTasks.loading,\n allActionPending: state.tasks.aggregatingTasks.allActionPending,\n batchActionPending: state.tasks.aggregatingTasks.batchActionPending,\n error: state.tasks.aggregatingTasks.error,\n group: state.tasks.aggregatingTasks.group,\n tasks: state.tasks.aggregatingTasks.data,\n pollInterval: state.settings.pollInterval,\n pageSize: state.settings.taskRowsPerPage,\n };\n}\n\nconst mapDispatchToProps = {\n listAggregatingTasksAsync,\n deleteAllAggregatingTasksAsync,\n archiveAllAggregatingTasksAsync,\n runAllAggregatingTasksAsync,\n batchDeleteAggregatingTasksAsync,\n batchRunAggregatingTasksAsync,\n batchArchiveAggregatingTasksAsync,\n deleteAggregatingTaskAsync,\n runAggregatingTaskAsync,\n archiveAggregatingTaskAsync,\n taskRowsPerPageChange,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string;\n selectedGroup: string;\n totalTaskCount: number; // total number of tasks in the group\n}\n\nconst columns: TableColumn[] = [\n { key: \"id\", label: \"ID\", align: \"left\" },\n { key: \"type\", label: \"Type\", align: \"left\" },\n { key: \"paylod\", label: \"Payload\", align: \"left\" },\n { key: \"group\", label: \"Group\", align: \"left\" },\n { key: \"actions\", label: \"Actions\", align: \"center\" },\n];\n\nfunction Row(props: RowProps) {\n const { task } = props;\n const classes = useRowStyles();\n const history = useHistory();\n return (\n history.push(taskDetailsPath(task.queue, task.id))}\n >\n {!window.READ_ONLY && (\n e.stopPropagation()}>\n \n ) =>\n props.onSelectChange(event.target.checked)\n }\n checked={props.isSelected}\n />\n \n \n )}\n \n
    \n {uuidPrefix(task.id)}\n \n {\n e.stopPropagation();\n navigator.clipboard.writeText(task.id);\n }}\n size=\"small\"\n className={classes.copyButton}\n >\n \n \n \n
    \n
    \n {task.type}\n \n \n {prettifyPayload(task.payload)}\n \n \n {task.group}\n {!window.READ_ONLY && (\n e.stopPropagation()}\n >\n {props.showActions ? (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n )}\n \n )}\n \n );\n}\n\nfunction AggregatingTasksTable(props: Props & ReduxProps) {\n const listTasks = (qname: string, pgn?: PaginationOptions) =>\n props.listAggregatingTasksAsync(qname, props.selectedGroup, pgn);\n\n const deleteAllTasks = (qname: string) =>\n props.deleteAllAggregatingTasksAsync(qname, props.selectedGroup);\n\n const archiveAllTasks = (qname: string) =>\n props.archiveAllAggregatingTasksAsync(qname, props.selectedGroup);\n\n const runAllTasks = (qname: string) =>\n props.runAllAggregatingTasksAsync(qname, props.selectedGroup);\n\n const batchDeleteTasks = (qname: string, taskIds: string[]) =>\n props.batchDeleteAggregatingTasksAsync(qname, props.selectedGroup, taskIds);\n\n const batchArchiveTasks = (qname: string, taskIds: string[]) =>\n props.batchArchiveAggregatingTasksAsync(\n qname,\n props.selectedGroup,\n taskIds\n );\n\n const batchRunTasks = (qname: string, taskIds: string[]) =>\n props.batchRunAggregatingTasksAsync(qname, props.selectedGroup, taskIds);\n\n const deleteTask = (qname: string, taskId: string) =>\n props.deleteAggregatingTaskAsync(qname, props.selectedGroup, taskId);\n\n const archiveTask = (qname: string, taskId: string) =>\n props.archiveAggregatingTaskAsync(qname, props.selectedGroup, taskId);\n\n const runTask = (qname: string, taskId: string) =>\n props.runAggregatingTaskAsync(qname, props.selectedGroup, taskId);\n\n return (\n }\n />\n );\n}\n\nexport default connector(AggregatingTasksTable);\n","import React from \"react\";\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport { VariableSizeList, ListChildComponentProps } from \"react-window\";\nimport { GroupInfo } from \"../api\";\nimport { isDarkTheme } from \"../theme\";\n\nconst useStyles = makeStyles((theme) => ({\n groupSelectOption: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n },\n groupSize: {\n fontSize: \"12px\",\n color: theme.palette.text.secondary,\n background: isDarkTheme(theme)\n ? \"#303030\"\n : theme.palette.background.default,\n textAlign: \"center\",\n padding: \"3px 6px\",\n borderRadius: \"10px\",\n marginRight: \"2px\",\n },\n inputRoot: {\n borderRadius: 20,\n paddingLeft: \"12px !important\",\n },\n}));\n\ninterface Props {\n selected: GroupInfo | null;\n onSelect: (newVal: GroupInfo | null) => void;\n groups: GroupInfo[];\n error: string;\n}\n\nexport default function GroupSelect(props: Props) {\n const classes = useStyles();\n const [inputValue, setInputValue] = React.useState(\"\");\n\n return (\n {\n props.onSelect(newValue);\n }}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n setInputValue(newInputValue);\n }}\n disableListWrap\n ListboxComponent={\n ListboxComponent as React.ComponentType<\n React.HTMLAttributes\n >\n }\n options={props.groups}\n getOptionLabel={(option: GroupInfo) => option.group}\n style={{ width: 300 }}\n renderOption={(option: GroupInfo) => (\n
    \n {option.group}\n {option.size}\n
    \n )}\n renderInput={(params) => (\n \n )}\n classes={{\n inputRoot: classes.inputRoot,\n }}\n size=\"small\"\n />\n );\n}\n\n// Virtualized list.\n// Reference: https://v4.mui.com/components/autocomplete/#virtualization\n\nconst LISTBOX_PADDING = 8; // px\n\nfunction renderRow(props: ListChildComponentProps) {\n const { data, index, style } = props;\n return React.cloneElement(data[index], {\n style: {\n ...style,\n top: (style.top as number) + LISTBOX_PADDING,\n },\n });\n}\n\nconst OuterElementContext = React.createContext({});\n\nconst OuterElementType = React.forwardRef((props, ref) => {\n const outerProps = React.useContext(OuterElementContext);\n return
    ;\n});\n\nfunction useResetCache(data: any) {\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (ref.current != null) {\n ref.current.resetAfterIndex(0, true);\n }\n }, [data]);\n return ref;\n}\n\n// Adapter for react-window\nconst ListboxComponent = React.forwardRef(\n function ListboxComponent(props, ref) {\n const { children, ...other } = props;\n const itemData = React.Children.toArray(children);\n const theme = useTheme();\n const smUp = useMediaQuery(theme.breakpoints.up(\"sm\"), { noSsr: true });\n const itemCount = itemData.length;\n const itemSize = smUp ? 36 : 48;\n\n const getChildSize = (child: React.ReactNode) => {\n if (React.isValidElement(child) && child.type === ListSubheader) {\n return 48;\n }\n return itemSize;\n };\n\n const getHeight = () => {\n if (itemCount > 8) {\n return 8 * itemSize;\n }\n return itemData.map(getChildSize).reduce((a, b) => a + b, 0);\n };\n\n const gridRef = useResetCache(itemCount);\n\n return (\n
    \n \n getChildSize(itemData[index])}\n overscanCount={5}\n itemCount={itemCount}\n >\n {renderRow}\n \n \n
    \n );\n }\n);\n","import { makeStyles } from \"@material-ui/core/styles\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport React, { useCallback, useState } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { listGroupsAsync } from \"../actions/groupsActions\";\nimport { GroupInfo } from \"../api\";\nimport { usePolling } from \"../hooks\";\nimport { AppState } from \"../store\";\nimport AggregatingTasksTable from \"./AggregatingTasksTable\";\nimport GroupSelect from \"./GroupSelect\";\n\nconst useStyles = makeStyles((theme) => ({\n groupSelector: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n alert: {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n}));\n\nfunction mapStateToProps(state: AppState) {\n return {\n groups: state.groups.data,\n groupsError: state.groups.error,\n pollInterval: state.settings.pollInterval,\n };\n}\n\nconst mapDispatchToProps = {\n listGroupsAsync,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface Props {\n queue: string;\n}\n\nfunction AggregatingTasksTableContainer(\n props: Props & ConnectedProps\n) {\n const [selectedGroup, setSelectedGroup] = useState(null);\n const { pollInterval, listGroupsAsync, queue } = props;\n const classes = useStyles();\n\n const fetchGroups = useCallback(() => {\n listGroupsAsync(queue);\n }, [listGroupsAsync, queue]);\n\n usePolling(fetchGroups, pollInterval);\n\n if (props.groupsError.length > 0) {\n return (\n \n Error\n {props.groupsError}\n \n );\n }\n if (props.groups.length === 0) {\n return (\n \n Info\n No aggregating tasks at this time.\n \n );\n }\n\n return (\n
    \n
    \n \n
    \n {selectedGroup !== null ? (\n \n ) : (\n \n Info\n
    Please select group
    \n
    \n )}\n
    \n );\n}\n\nexport default connector(AggregatingTasksTableContainer);\n","import React, { useState } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Chip from \"@material-ui/core/Chip\";\nimport InputBase from \"@material-ui/core/InputBase\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport ActiveTasksTable from \"./ActiveTasksTable\";\nimport PendingTasksTable from \"./PendingTasksTable\";\nimport ScheduledTasksTable from \"./ScheduledTasksTable\";\nimport RetryTasksTable from \"./RetryTasksTable\";\nimport ArchivedTasksTable from \"./ArchivedTasksTable\";\nimport CompletedTasksTable from \"./CompletedTasksTable\";\nimport AggregatingTasksTableContainer from \"./AggregatingTasksTableContainer\";\nimport { useHistory } from \"react-router-dom\";\nimport { queueDetailsPath, taskDetailsPath } from \"../paths\";\nimport { QueueInfo } from \"../reducers/queuesReducer\";\nimport { AppState } from \"../store\";\nimport { isDarkTheme } from \"../theme\";\n\ninterface TabPanelProps {\n children?: React.ReactNode;\n selected: string; // currently selected value\n value: string; // tab panel will be shown if selected value equals to the value\n}\n\nfunction TabPanel(props: TabPanelProps) {\n const { children, value, selected, ...other } = props;\n\n return (\n
    \n );\n}\n\nfunction mapStatetoProps(state: AppState, ownProps: Props) {\n // TODO: Add loading state for each queue.\n const queueInfo = state.queues.data.find(\n (q: QueueInfo) => q.name === ownProps.queue\n );\n const currentStats = queueInfo\n ? queueInfo.currentStats\n : {\n queue: ownProps.queue,\n paused: false,\n size: 0,\n groups: 0,\n active: 0,\n pending: 0,\n aggregating: 0,\n scheduled: 0,\n retry: 0,\n archived: 0,\n completed: 0,\n processed: 0,\n failed: 0,\n timestamp: \"n/a\",\n };\n return { currentStats };\n}\n\nconst connector = connect(mapStatetoProps);\n\ntype ReduxProps = ConnectedProps;\n\ninterface Props {\n queue: string;\n selected: string;\n}\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n width: \"100%\",\n height: \"100%\",\n background: theme.palette.background.paper,\n },\n header: {\n display: \"flex\",\n alignItems: \"center\",\n paddingTop: theme.spacing(1),\n },\n heading: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n chip: {\n marginLeft: theme.spacing(1),\n },\n taskcount: {\n fontSize: \"12px\",\n color: theme.palette.text.secondary,\n background: isDarkTheme(theme)\n ? \"#303030\"\n : theme.palette.background.default,\n textAlign: \"center\",\n padding: \"3px 6px\",\n borderRadius: \"10px\",\n marginLeft: \"2px\",\n },\n searchbar: {\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n marginRight: theme.spacing(1),\n flex: 1,\n },\n search: {\n position: \"relative\",\n maxWidth: 400,\n borderRadius: \"18px\",\n backgroundColor: isDarkTheme(theme) ? \"#303030\" : theme.palette.grey[100],\n \"&:hover, &:focus\": {\n backgroundColor: isDarkTheme(theme) ? \"#303030\" : theme.palette.grey[200],\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: \"100%\",\n position: \"absolute\",\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n inputRoot: {\n color: \"inherit\",\n width: \"100%\",\n },\n inputInput: {\n padding: theme.spacing(1, 1, 1, 0),\n // vertical padding + font size from searchIcon\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n width: \"100%\",\n fontSize: \"0.85rem\",\n },\n}));\n\nfunction TasksTableContainer(props: Props & ReduxProps) {\n const { currentStats } = props;\n const classes = useStyles();\n const history = useHistory();\n const chips = [\n { key: \"active\", label: \"Active\", count: currentStats.active },\n { key: \"pending\", label: \"Pending\", count: currentStats.pending },\n {\n key: \"aggregating\",\n label: \"Aggregating\",\n count: currentStats.aggregating,\n },\n { key: \"scheduled\", label: \"Scheduled\", count: currentStats.scheduled },\n { key: \"retry\", label: \"Retry\", count: currentStats.retry },\n { key: \"archived\", label: \"Archived\", count: currentStats.archived },\n { key: \"completed\", label: \"Completed\", count: currentStats.completed },\n ];\n\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n return (\n \n
    \n \n Tasks\n \n
    \n {chips.map((c) => (\n \n {c.label} {c.count}\n
    \n }\n variant=\"outlined\"\n color={props.selected === c.key ? \"primary\" : \"default\"}\n onClick={() => history.push(queueDetailsPath(props.queue, c.key))}\n />\n ))}\n
    \n
    \n
    \n
    \n \n
    \n {\n setSearchQuery(e.target.value);\n }}\n inputProps={{\n \"aria-label\": \"search\",\n onKeyDown: (e) => {\n if (e.key === \"Enter\") {\n history.push(\n taskDetailsPath(props.queue, searchQuery.trim())\n );\n }\n },\n }}\n />\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n );\n}\n\nexport default connector(TasksTableContainer);\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport prettyBytes from \"pretty-bytes\";\nimport { AppState } from \"../store\";\nimport { percentage } from \"../utils\";\n\nconst useStyles = makeStyles((theme) => ({\n banner: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n display: \"flex\",\n },\n bannerItem: {\n flexGrow: 1,\n borderLeft: `1px solid ${theme.palette.divider}`,\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n}));\n\ninterface Props {\n qname: string;\n}\n\nfunction mapStateToProps(state: AppState, ownProps: Props) {\n const queueInfo = state.queues.data.find((q) => q.name === ownProps.qname);\n return {\n queue: queueInfo?.currentStats,\n };\n}\n\nconst connector = connect(mapStateToProps);\n\ntype ReduxProps = ConnectedProps;\n\nfunction QueueInfoBanner(props: Props & ReduxProps) {\n const classes = useStyles();\n const { queue, qname } = props;\n return (\n
    \n
    \n \n Queue name\n \n {qname}\n
    \n\n
    \n \n Queue state\n \n \n {queue ? (queue.paused ? \"paused\" : \"run\") : \"-\"}\n \n
    \n\n
    \n \n Queue size\n \n \n {queue ? queue.size : \"-\"}\n \n
    \n\n
    \n \n Task groups\n \n \n {queue ? queue.groups : \"-\"}\n \n
    \n\n
    \n \n Memory usage\n \n \n {queue ? prettyBytes(queue.memory_usage_bytes) : \"-\"}\n \n
    \n\n
    \n \n Latency\n \n \n {queue ? queue.display_latency : \"-\"}\n \n
    \n\n
    \n \n Processed\n \n \n {queue ? queue.processed : \"-\"}\n \n
    \n\n
    \n \n Failed\n \n \n {queue ? queue.failed : \"-\"}\n \n
    \n\n
    \n \n Error rate\n \n \n {queue ? percentage(queue.failed, queue.processed) : \"-\"}\n \n
    \n
    \n );\n}\n\nexport default connector(QueueInfoBanner);\n","import React, { useState } from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { emphasize, withStyles, Theme } from \"@material-ui/core/styles\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Chip from \"@material-ui/core/Chip\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport { paths as getPaths, queueDetailsPath } from \"../paths\";\nimport { isDarkTheme } from \"../theme\";\n\nconst StyledBreadcrumb = withStyles((theme: Theme) => ({\n root: {\n backgroundColor: isDarkTheme(theme)\n ? \"#303030\"\n : theme.palette.background.default,\n height: theme.spacing(3),\n color: theme.palette.text.secondary,\n fontWeight: 400,\n \"&:hover, &:focus\": {\n backgroundColor: theme.palette.action.hover,\n },\n \"&:active\": {\n boxShadow: theme.shadows[1],\n backgroundColor: emphasize(theme.palette.action.hover, 0.12),\n },\n },\n}))(Chip) as typeof Chip; // Note: need a type cast here because https://github.com/Microsoft/TypeScript/issues/26591\n\ninterface Props {\n // All queue names.\n queues: string[];\n // Name of the queue currently selected.\n queueName: string;\n // ID of the task currently selected (optional).\n taskId?: string;\n}\n\nexport default function QueueBreadcrumbs(props: Props) {\n const history = useHistory();\n const [anchorEl, setAnchorEl] = useState(null);\n const paths = getPaths();\n\n const handleClick = (event: React.MouseEvent) => {\n event.preventDefault();\n setAnchorEl(event.currentTarget);\n };\n\n const closeMenu = () => {\n setAnchorEl(null);\n };\n\n return (\n <>\n \n history.push(paths.HOME)}\n />\n }\n onClick={handleClick}\n onDelete={handleClick}\n />\n {props.taskId && }\n \n \n {props.queues.sort().map((qname) => (\n {\n history.push(queueDetailsPath(qname));\n closeMenu();\n }}\n >\n {qname}\n \n ))}\n \n \n );\n}\n","import React, { useEffect } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TasksTableContainer from \"../components/TasksTableContainer\";\nimport QueueInfoBanner from \"../components/QueueInfoBanner\";\nimport QueueBreadCrumb from \"../components/QueueBreadcrumb\";\nimport { useParams } from \"react-router-dom\";\nimport { listQueuesAsync } from \"../actions/queuesActions\";\nimport { AppState } from \"../store\";\nimport { QueueDetailsRouteParams } from \"../paths\";\nimport { useQuery } from \"../hooks\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n queues: state.queues.data.map((q) => q.name),\n };\n}\n\nconst connector = connect(mapStateToProps, { listQueuesAsync });\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(2),\n },\n breadcrumbs: {\n marginBottom: theme.spacing(2),\n },\n banner: {\n marginBottom: theme.spacing(2),\n },\n tasksTable: {\n marginBottom: theme.spacing(4),\n },\n}));\n\nconst validStatus = [\n \"active\",\n \"pending\",\n \"aggregating\",\n \"scheduled\",\n \"retry\",\n \"archived\",\n \"completed\",\n];\nconst defaultStatus = \"active\";\n\nfunction TasksView(props: ConnectedProps) {\n const classes = useStyles();\n const { qname } = useParams();\n const query = useQuery();\n let selected = query.get(\"status\");\n if (!selected || !validStatus.includes(selected)) {\n selected = defaultStatus;\n }\n const { listQueuesAsync } = props;\n\n useEffect(() => {\n listQueuesAsync();\n }, [listQueuesAsync]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default connector(TasksView);\n","import React, { useMemo, useEffect } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport { useParams } from \"react-router-dom\";\nimport QueueBreadCrumb from \"../components/QueueBreadcrumb\";\nimport { AppState } from \"../store\";\nimport { getTaskInfoAsync } from \"../actions/tasksActions\";\nimport { TaskDetailsRouteParams } from \"../paths\";\nimport { usePolling } from \"../hooks\";\nimport { listQueuesAsync } from \"../actions/queuesActions\";\nimport SyntaxHighlighter from \"../components/SyntaxHighlighter\";\nimport { durationFromSeconds, stringifyDuration, timeAgo, prettifyPayload } from \"../utils\";\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.tasks.taskInfo.loading,\n error: state.tasks.taskInfo.error,\n taskInfo: state.tasks.taskInfo.data,\n pollInterval: state.settings.pollInterval,\n queues: state.queues.data.map((q) => q.name), // FIXME: This data may not be available\n };\n}\n\nconst connector = connect(mapStateToProps, {\n getTaskInfoAsync,\n listQueuesAsync,\n});\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(2),\n },\n alert: {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n },\n paper: {\n padding: theme.spacing(2),\n marginTop: theme.spacing(2),\n },\n breadcrumbs: {\n marginBottom: theme.spacing(2),\n },\n infoRow: {\n display: \"flex\",\n alignItems: \"center\",\n paddingTop: theme.spacing(1),\n },\n infoKeyCell: {\n width: \"140px\",\n },\n infoValueCell: {\n width: \"auto\",\n },\n footer: {\n paddingTop: theme.spacing(3),\n paddingBottom: theme.spacing(3),\n },\n}));\n\ntype Props = ConnectedProps;\n\nfunction TaskDetailsView(props: Props) {\n const classes = useStyles();\n const { qname, taskId } = useParams();\n const { getTaskInfoAsync, pollInterval, listQueuesAsync, taskInfo } = props;\n const history = useHistory();\n\n const fetchTaskInfo = useMemo(() => {\n return () => {\n getTaskInfoAsync(qname, taskId);\n };\n }, [qname, taskId, getTaskInfoAsync]);\n\n usePolling(fetchTaskInfo, pollInterval);\n\n // Fetch queues data to populate props.queues\n useEffect(() => {\n listQueuesAsync();\n }, [listQueuesAsync]);\n\n return (\n \n \n \n \n \n \n {props.error ? (\n \n Error\n {props.error}\n \n ) : (\n \n Task Info\n
    \n
    \n \n ID:{\" \"}\n \n \n {taskInfo?.id}\n \n
    \n
    \n \n Type:{\" \"}\n \n \n {taskInfo?.type}\n \n
    \n
    \n \n State:{\" \"}\n \n \n {taskInfo?.state}\n \n
    \n
    \n \n Queue:{\" \"}\n \n \n {taskInfo?.queue}\n \n
    \n
    \n \n Retry:{\" \"}\n \n \n {taskInfo?.retried}/{taskInfo?.max_retry}\n \n
    \n
    \n \n Last Failure:{\" \"}\n \n \n {taskInfo?.last_failed_at ? (\n \n {taskInfo?.error_message} ({taskInfo?.last_failed_at})\n \n ) : (\n - \n )}\n \n
    \n
    \n \n Next Process Time:{\" \"}\n \n {taskInfo?.next_process_at ? (\n {taskInfo?.next_process_at}\n ) : (\n - \n )}\n
    \n
    \n
    \n \n Timeout:{\" \"}\n \n \n {taskInfo?.timeout_seconds ? (\n {taskInfo?.timeout_seconds} seconds\n ) : (\n - \n )}\n \n
    \n
    \n \n Deadline:{\" \"}\n \n \n {taskInfo?.deadline ? (\n {taskInfo?.deadline}\n ) : (\n - \n )}\n \n
    \n
    \n \n Payload:{\" \"}\n \n
    \n {taskInfo?.payload && (\n \n {prettifyPayload(taskInfo.payload)}\n \n )}\n
    \n
    \n {\n /* Completed Task Only */ taskInfo?.state === \"completed\" && (\n <>\n
    \n \n Completed:{\" \"}\n \n
    \n \n {timeAgo(taskInfo.completed_at)} (\n {taskInfo.completed_at})\n \n
    \n
    \n
    \n \n Result:{\" \"}\n \n
    \n \n {prettifyPayload(taskInfo.result)}\n \n
    \n
    \n
    \n \n TTL:{\" \"}\n \n \n \n {taskInfo.ttl_seconds > 0\n ? `${stringifyDuration(\n durationFromSeconds(taskInfo.ttl_seconds)\n )} left`\n : \"expired\"}\n \n \n
    \n \n )\n }\n
    \n )}\n
    \n }\n onClick={() => history.goBack()}\n >\n Go Back\n \n
    \n
    \n
    \n
    \n );\n}\n\nexport default connector(TaskDetailsView);\n","import React, { useState } from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport Container from \"@material-ui/core/Container\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport { pollIntervalChange, selectTheme } from \"../actions/settingsActions\";\nimport { AppState } from \"../store\";\nimport FormControl from \"@material-ui/core/FormControl/FormControl\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { ThemePreference } from \"../reducers/settingsReducer\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n formControl: {\n margin: theme.spacing(1),\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n selectEmpty: {\n marginTop: theme.spacing(2),\n },\n select: {\n width: \"200px\",\n },\n}));\n\nfunction mapStateToProps(state: AppState) {\n return {\n pollInterval: state.settings.pollInterval,\n themePreference: state.settings.themePreference,\n };\n}\n\nconst mapDispatchToProps = { pollIntervalChange, selectTheme };\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype PropsFromRedux = ConnectedProps;\n\nfunction SettingsView(props: PropsFromRedux) {\n const classes = useStyles();\n\n const [sliderValue, setSliderValue] = useState(props.pollInterval);\n const handleSliderValueChange = (event: any, val: number | number[]) => {\n setSliderValue(val as number);\n };\n\n const handleSliderValueCommited = (event: any, val: number | number[]) => {\n props.pollIntervalChange(val as number);\n };\n\n const handleThemeChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n props.selectTheme(event.target.value as ThemePreference);\n };\n return (\n \n \n \n \n \n Settings\n \n \n \n\n \n \n \n Polling Interval\n \n Web UI will fetch live data with the specified interval\n \n \n Currently: Every{\" \"}\n {sliderValue === 1 ? \"second\" : `${sliderValue} seconds`}\n \n \n \n \n \n\n \n \n \n \n Dark Theme\n \n \n System Default\n \n Always\n Never\n \n \n \n \n \n \n \n );\n}\n\nexport default connector(SettingsView);\n","import React, { useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport clsx from \"clsx\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableSortLabel from \"@material-ui/core/TableSortLabel\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\nimport KeyboardArrowUpIcon from \"@material-ui/icons/KeyboardArrowUp\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport SyntaxHighlighter from \"./SyntaxHighlighter\";\nimport { ServerInfo } from \"../api\";\nimport { SortDirection, SortableTableColumn } from \"../types/table\";\nimport { timeAgo, uuidPrefix, prettifyPayload } from \"../utils\";\nimport { queueDetailsPath } from \"../paths\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n table: {\n minWidth: 650,\n },\n fixedCell: {\n position: \"sticky\",\n zIndex: 1,\n left: 0,\n background: theme.palette.background.paper,\n },\n}));\n\nenum SortBy {\n HostPID,\n Status,\n ActiveWorkers,\n Queues,\n Started,\n}\nconst colConfigs: SortableTableColumn[] = [\n {\n label: \"Host:PID\",\n key: \"host\",\n sortBy: SortBy.HostPID,\n align: \"left\",\n },\n {\n label: \"Started\",\n key: \"started\",\n sortBy: SortBy.Started,\n align: \"left\",\n },\n {\n label: \"Status\",\n key: \"status\",\n sortBy: SortBy.Status,\n align: \"left\",\n },\n {\n label: \"Queues\",\n key: \"queues\",\n sortBy: SortBy.Queues,\n align: \"left\",\n },\n {\n label: \"Active Workers\",\n key: \"workers\",\n sortBy: SortBy.ActiveWorkers,\n align: \"left\",\n },\n];\n\n// sortServers takes a array of server-infos and return a sorted array.\n// It returns a new array and leave the original array untouched.\nfunction sortServerInfos(\n entries: ServerInfo[],\n cmpFn: (first: ServerInfo, second: ServerInfo) => number\n): ServerInfo[] {\n let copy = [...entries];\n copy.sort(cmpFn);\n return copy;\n}\n\ninterface Props {\n servers: ServerInfo[];\n}\n\nexport default function ServersTable(props: Props) {\n const classes = useStyles();\n const [sortBy, setSortBy] = useState(SortBy.HostPID);\n const [sortDir, setSortDir] = useState(SortDirection.Asc);\n\n const createSortClickHandler = (sortKey: SortBy) => (e: React.MouseEvent) => {\n if (sortKey === sortBy) {\n // Toggle sort direction.\n const nextSortDir =\n sortDir === SortDirection.Asc ? SortDirection.Desc : SortDirection.Asc;\n setSortDir(nextSortDir);\n } else {\n // Change the sort key.\n setSortBy(sortKey);\n }\n };\n\n const cmpFunc = (s1: ServerInfo, s2: ServerInfo): number => {\n let isS1Smaller = false;\n switch (sortBy) {\n case SortBy.HostPID:\n if (s1.host === s2.host && s1.pid === s2.pid) return 0;\n if (s1.host === s2.host) {\n isS1Smaller = s1.pid < s2.pid;\n } else {\n isS1Smaller = s1.host < s2.host;\n }\n break;\n case SortBy.Started:\n const s1StartTime = Date.parse(s1.start_time);\n const s2StartTime = Date.parse(s2.start_time);\n if (s1StartTime === s2StartTime) return 0;\n isS1Smaller = s1StartTime < s2StartTime;\n break;\n case SortBy.Status:\n if (s1.status === s2.status) return 0;\n isS1Smaller = s1.status < s2.status;\n break;\n case SortBy.Queues:\n const s1Queues = Object.keys(s1.queue_priorities).join(\",\");\n const s2Queues = Object.keys(s2.queue_priorities).join(\",\");\n if (s1Queues === s2Queues) return 0;\n isS1Smaller = s1Queues < s2Queues;\n break;\n case SortBy.ActiveWorkers:\n if (s1.active_workers.length === s2.active_workers.length) {\n return 0;\n }\n isS1Smaller = s1.active_workers.length < s2.active_workers.length;\n break;\n default:\n // eslint-disable-next-line no-throw-literal\n throw `Unexpected order by value: ${sortBy}`;\n }\n if (sortDir === SortDirection.Asc) {\n return isS1Smaller ? -1 : 1;\n } else {\n return isS1Smaller ? 1 : -1;\n }\n };\n\n if (props.servers.length === 0) {\n return (\n \n Info\n No servers found at this time.\n \n );\n }\n\n return (\n \n \n \n \n {colConfigs.map((cfg, i) => (\n \n \n {cfg.label}\n \n \n ))}\n \n \n \n \n {sortServerInfos(props.servers, cmpFunc).map((srv) => (\n \n ))}\n \n
    \n
    \n );\n}\ninterface RowProps {\n server: ServerInfo;\n}\n\nconst useRowStyles = makeStyles((theme) => ({\n rowRoot: {\n \"& > *\": {\n borderBottom: \"unset\",\n },\n },\n noBorder: {\n border: \"none\",\n },\n link: {\n color: theme.palette.text.primary,\n },\n}));\n\nfunction Row(props: RowProps) {\n const classes = useRowStyles();\n const { server } = props;\n const [open, setOpen] = useState(false);\n const qnames = Object.keys(server.queue_priorities);\n return (\n \n \n \n {server.host}:{server.pid}\n \n {timeAgo(server.start_time)}\n {server.status}\n \n {qnames.map((qname, idx) => (\n \n \n {qname}\n \n {idx === qnames.length - 1 ? \"\" : \", \"}\n \n ))}\n \n \n {server.active_workers.length}/{server.concurrency}\n \n \n \n setOpen(!open)}\n >\n {open ? : }\n \n \n \n \n \n \n \n \n \n \n Active Workers\n \n \n \n \n Task ID\n Task Payload\n Queue\n Started\n \n \n \n {server.active_workers.map((worker) => (\n \n \n {uuidPrefix(worker.task_id)}\n \n \n \n {prettifyPayload(worker.task_payload)}\n \n \n {worker.queue}\n {timeAgo(worker.start_time)}\n \n ))}\n \n
    \n
    \n \n \n Queue Priority\n \n \n \n \n Queue\n Priority\n \n \n \n {qnames.map((qname) => (\n \n \n \n {qname}\n \n \n \n {server.queue_priorities[qname]}\n \n \n ))}\n \n
    \n \n \n Strict Priority:{\" \"}\n \n \n {server.strict_priority_enabled ? \"ON\" : \"OFF\"}\n \n \n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n","import { Dispatch } from \"redux\";\nimport { listServers, ListServersResponse } from \"../api\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\n// List of server related action types.\nexport const LIST_SERVERS_BEGIN = \"LIST_SERVERS_BEGIN\";\nexport const LIST_SERVERS_SUCCESS = \"LIST_SERVERS_SUCCESS\";\nexport const LIST_SERVERS_ERROR = \"LIST_SERVERS_ERROR\";\n\ninterface ListServersBeginAction {\n type: typeof LIST_SERVERS_BEGIN;\n}\ninterface ListServersSuccessAction {\n type: typeof LIST_SERVERS_SUCCESS;\n payload: ListServersResponse;\n}\ninterface ListServersErrorAction {\n type: typeof LIST_SERVERS_ERROR;\n error: string; // error description\n}\n\n// Union of all server related actions.\nexport type ServersActionTypes =\n | ListServersBeginAction\n | ListServersSuccessAction\n | ListServersErrorAction;\n\nexport function listServersAsync() {\n return async (dispatch: Dispatch) => {\n dispatch({ type: LIST_SERVERS_BEGIN });\n try {\n const response = await listServers();\n dispatch({\n type: LIST_SERVERS_SUCCESS,\n payload: response,\n });\n } catch (error) {\n console.error(`listServersAsync: ${toErrorStringWithHttpStatus(error)}`);\n dispatch({\n type: LIST_SERVERS_ERROR,\n error: toErrorString(error),\n });\n }\n };\n}\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport Container from \"@material-ui/core/Container\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport ServersTable from \"../components/ServersTable\";\nimport { listServersAsync } from \"../actions/serversActions\";\nimport { AppState } from \"../store\";\nimport { usePolling } from \"../hooks\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n heading: {\n paddingLeft: theme.spacing(2),\n marginBottom: theme.spacing(1),\n },\n}));\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.servers.loading,\n error: state.servers.error,\n servers: state.servers.data,\n pollInterval: state.settings.pollInterval,\n };\n}\n\nconst connector = connect(mapStateToProps, { listServersAsync });\n\ntype Props = ConnectedProps;\n\nfunction ServersView(props: Props) {\n const { pollInterval, listServersAsync } = props;\n const classes = useStyles();\n\n usePolling(listServersAsync, pollInterval);\n\n return (\n \n \n {props.error === \"\" ? (\n \n \n \n Servers\n \n \n \n \n ) : (\n \n \n Error\n Could not retrieve servers live data —{\" \"}\n See the logs for details\n \n \n )}\n \n \n );\n}\n\nexport default connector(ServersView);\n","import { Dispatch } from \"redux\";\nimport { getRedisInfo, RedisInfoResponse } from \"../api\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\n// List of redis-info related action types.\nexport const GET_REDIS_INFO_BEGIN = \"GET_REDIS_INFO_BEGIN\";\nexport const GET_REDIS_INFO_SUCCESS = \"GET_REDIS_INFO_SUCCESS\";\nexport const GET_REDIS_INFO_ERROR = \"GET_REDIS_INFO_ERROR\";\n\ninterface GetRedisInfoBeginAction {\n type: typeof GET_REDIS_INFO_BEGIN;\n}\n\ninterface GetRedisInfoSuccessAction {\n type: typeof GET_REDIS_INFO_SUCCESS;\n payload: RedisInfoResponse;\n}\n\ninterface GetRedisInfoErrorAction {\n type: typeof GET_REDIS_INFO_ERROR;\n error: string;\n}\n\n// Union of all redis-info related actions.\nexport type RedisInfoActionTypes =\n | GetRedisInfoBeginAction\n | GetRedisInfoErrorAction\n | GetRedisInfoSuccessAction;\n\nexport function getRedisInfoAsync() {\n return async (dispatch: Dispatch) => {\n dispatch({ type: GET_REDIS_INFO_BEGIN });\n try {\n const response = await getRedisInfo();\n dispatch({ type: GET_REDIS_INFO_SUCCESS, payload: response });\n } catch (error) {\n console.error(`getRedisInfoAsync: ${toErrorStringWithHttpStatus(error)}`);\n dispatch({\n type: GET_REDIS_INFO_ERROR,\n error: toErrorString(error),\n });\n }\n };\n}\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport { QueueLocation } from \"../api\";\n\nconst useStyles = makeStyles((theme) => ({\n table: {\n minWidth: 650,\n },\n}));\n\ninterface Props {\n queueLocations: QueueLocation[];\n}\n\nexport default function QueueLocationTable(props: Props) {\n const classes = useStyles();\n\n return (\n \n \n \n \n Queue\n KeySlot\n Node Addresses\n \n \n \n {props.queueLocations.map((loc) => (\n \n \n {loc.queue}\n \n {loc.keyslot}\n {loc.nodes.join(\", \")}\n \n ))}\n \n
    \n
    \n );\n}\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport Container from \"@material-ui/core/Container\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport AlertTitle from \"@material-ui/lab/AlertTitle\";\nimport SyntaxHighlighter from \"../components/SyntaxHighlighter\";\nimport { getRedisInfoAsync } from \"../actions/redisInfoActions\";\nimport { usePolling } from \"../hooks\";\nimport { AppState } from \"../store\";\nimport { timeAgoUnix } from \"../utils\";\nimport { RedisInfo } from \"../api\";\nimport QueueLocationTable from \"../components/QueueLocationTable\";\nimport Link from \"@material-ui/core/Link\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n}));\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.redis.loading,\n error: state.redis.error,\n redisInfo: state.redis.data,\n redisAddress: state.redis.address,\n redisInfoRaw: state.redis.rawData,\n redisClusterEnabled: state.redis.cluster,\n redisClusterNodesRaw: state.redis.rawClusterNodes,\n queueLocations: state.redis.queueLocations,\n pollInterval: state.settings.pollInterval,\n themePreference: state.settings.themePreference,\n };\n}\n\nconst connector = connect(mapStateToProps, { getRedisInfoAsync });\ntype Props = ConnectedProps;\n\nfunction RedisInfoView(props: Props) {\n const classes = useStyles();\n const {\n pollInterval,\n getRedisInfoAsync,\n redisInfo,\n redisInfoRaw,\n redisClusterEnabled,\n redisClusterNodesRaw,\n queueLocations,\n } = props;\n usePolling(getRedisInfoAsync, pollInterval);\n\n // Metrics to show\n // - Used Memory\n // - Memory Fragmentation Ratio\n // - Connected Clients\n // - Connected Replicas (slaves)\n // - Persistence (rdb_last_save_time, rdb_changes_since_last_save)\n // - Errors (rejected_connections)\n\n return (\n \n \n {props.error === \"\" ? (\n <>\n \n \n {redisClusterEnabled ? \"Redis Cluster Info\" : \"Redis Info\"}\n \n {!redisClusterEnabled && (\n \n Connected to: {props.redisAddress}\n \n )}\n \n {queueLocations && queueLocations.length > 0 && (\n \n \n Queue Location in Cluster\n \n \n \n )}\n {redisClusterNodesRaw && (\n <>\n \n \n \n CLUSTER NODES\n {\" \"}\n Command Output\n \n \n {redisClusterNodesRaw}\n \n \n \n )}\n {redisInfo && !redisClusterEnabled && (\n \n )}\n {redisInfoRaw && (\n <>\n \n \n {redisClusterEnabled ? (\n \n CLUSTER INFO\n \n ) : (\n \n INFO\n \n )}{\" \"}\n Command Output\n \n \n {redisInfoRaw}\n \n \n \n )}\n \n ) : (\n \n \n Error\n Could not retrieve redis live data —{\" \"}\n See the logs for details\n \n \n )}\n \n \n );\n}\n\nfunction RedisMetricCards(props: { redisInfo: RedisInfo }) {\n const { redisInfo } = props;\n return (\n <>\n \n \n Server\n \n \n \n \n \n \n \n \n \n \n \n Memory\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Connections\n \n \n \n \n \n \n \n \n \n \n \n Persistence\n \n \n \n \n \n \n \n \n \n \n );\n}\n\ninterface MetricCardProps {\n title: string;\n content: string;\n}\n\nfunction MetricCard(props: MetricCardProps) {\n return (\n \n \n \n {props.content}\n \n \n {props.title}\n \n \n \n );\n}\n\nexport default connector(RedisInfoView);\n","import { Dispatch } from \"redux\";\nimport { getMetrics, MetricsResponse } from \"../api\";\nimport { toErrorString, toErrorStringWithHttpStatus } from \"../utils\";\n\n// List of metrics related action types.\nexport const GET_METRICS_BEGIN = \"GET_METRICS_BEGIN\";\nexport const GET_METRICS_SUCCESS = \"GET_METRICS_SUCCESS\";\nexport const GET_METRICS_ERROR = \"GET_METRICS_ERROR\";\n\ninterface GetMetricsBeginAction {\n type: typeof GET_METRICS_BEGIN;\n}\n\ninterface GetMetricsSuccessAction {\n type: typeof GET_METRICS_SUCCESS;\n payload: MetricsResponse;\n}\n\ninterface GetMetricsErrorAction {\n type: typeof GET_METRICS_ERROR;\n error: string;\n}\n\n// Union of all metrics related actions.\nexport type MetricsActionTypes =\n | GetMetricsBeginAction\n | GetMetricsSuccessAction\n | GetMetricsErrorAction;\n\nexport function getMetricsAsync(\n endTime: number,\n duration: number,\n queues: string[]\n) {\n return async (dispatch: Dispatch) => {\n dispatch({ type: GET_METRICS_BEGIN });\n try {\n const response = await getMetrics(endTime, duration, queues);\n dispatch({ type: GET_METRICS_SUCCESS, payload: response });\n } catch (error) {\n console.error(`getMetricsAsync: ${toErrorStringWithHttpStatus(error)}`);\n dispatch({\n type: GET_METRICS_ERROR,\n error: toErrorString(error),\n });\n }\n };\n}\n","import { useTheme } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport {\n LineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { Metrics } from \"../api\";\n\ninterface Props {\n data: Metrics[];\n\n // both startTime and endTime are in unix time (seconds)\n startTime: number;\n endTime: number;\n\n // (optional): Tick formatter function for YAxis\n yAxisTickFormatter?: (val: number) => string;\n}\n\n// interface that rechart understands.\ninterface ChartData {\n timestamp: number;\n [qname: string]: number;\n}\n\nfunction toChartData(metrics: Metrics[]): ChartData[] {\n if (metrics.length === 0) {\n return [];\n }\n let byTimestamp: { [key: number]: ChartData } = {};\n for (let x of metrics) {\n for (let [ts, val] of x.values) {\n if (!byTimestamp[ts]) {\n byTimestamp[ts] = { timestamp: ts };\n }\n const qname = x.metric.queue;\n if (qname) {\n byTimestamp[ts][qname] = parseFloat(val);\n }\n }\n }\n return Object.values(byTimestamp);\n}\n\nconst lineColors = [\n \"#2085ec\",\n \"#72b4eb\",\n \"#0a417a\",\n \"#8464a0\",\n \"#cea9bc\",\n \"#323232\",\n];\n\nfunction QueueMetricsChart(props: Props) {\n const theme = useTheme();\n\n const data = toChartData(props.data);\n const keys = props.data.map((x) => x.metric.queue);\n return (\n \n \n \n \n new Date(timestamp * 1000).toLocaleTimeString()\n }\n type=\"number\"\n scale=\"time\"\n stroke={theme.palette.text.secondary}\n />\n \n {\n return new Date(timestamp * 1000).toLocaleTimeString();\n }}\n />\n \n {keys.map((key, idx) => (\n \n ))}\n \n \n );\n}\n\nQueueMetricsChart.defaultProps = {\n yAxisTickFormatter: (val: number) => val.toString(),\n};\n\nexport default QueueMetricsChart;\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Button, { ButtonProps } from \"@material-ui/core/Button\";\nimport ButtonGroup from \"@material-ui/core/ButtonGroup\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Popover from \"@material-ui/core/Popover\";\nimport Radio from \"@material-ui/core/Radio\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport ArrowLeftIcon from \"@material-ui/icons/ArrowLeft\";\nimport ArrowRightIcon from \"@material-ui/icons/ArrowRight\";\nimport FilterListIcon from \"@material-ui/icons/FilterList\";\nimport dayjs from \"dayjs\";\nimport { currentUnixtime, parseDuration } from \"../utils\";\nimport { AppState } from \"../store\";\nimport { isDarkTheme } from \"../theme\";\n\nfunction mapStateToProps(state: AppState) {\n return { pollInterval: state.settings.pollInterval };\n}\n\nconst connector = connect(mapStateToProps);\ntype ReduxProps = ConnectedProps;\n\ninterface Props extends ReduxProps {\n // Specifies the endtime in Unix time seconds.\n endTimeSec: number;\n onEndTimeChange: (t: number, isEndTimeFixed: boolean) => void;\n\n // Specifies the duration in seconds.\n durationSec: number;\n onDurationChange: (d: number, isEndTimeFixed: boolean) => void;\n\n // All available queues.\n queues: string[];\n // Selected queues.\n selectedQueues: string[];\n addQueue: (qname: string) => void;\n removeQueue: (qname: string) => void;\n}\n\ninterface State {\n endTimeOption: EndTimeOption;\n durationOption: DurationOption;\n customEndTime: string; // text shown in input field\n customDuration: string; // text shown in input field\n customEndTimeError: string;\n customDurationError: string;\n}\n\ntype EndTimeOption = \"real_time\" | \"freeze_at_now\" | \"custom\";\ntype DurationOption = \"1h\" | \"6h\" | \"1d\" | \"8d\" | \"30d\" | \"custom\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n alignItems: \"center\",\n },\n endTimeCaption: {\n marginRight: theme.spacing(1),\n },\n shiftButtons: {\n marginLeft: theme.spacing(1),\n },\n buttonGroupRoot: {\n height: 29,\n position: \"relative\",\n top: 1,\n },\n endTimeShiftControls: {\n padding: theme.spacing(1),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderBottomColor: theme.palette.divider,\n borderBottomWidth: 1,\n borderBottomStyle: \"solid\",\n },\n leftShiftButtons: {\n display: \"flex\",\n alignItems: \"center\",\n marginRight: theme.spacing(2),\n },\n rightShiftButtons: {\n display: \"flex\",\n alignItems: \"center\",\n marginLeft: theme.spacing(2),\n },\n controlsContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n controlSelectorBox: {\n display: \"flex\",\n minWidth: 490,\n padding: theme.spacing(2),\n },\n controlEndTimeSelector: {\n width: \"50%\",\n },\n controlDurationSelector: {\n width: \"50%\",\n },\n radioButtonRoot: {\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n },\n formControlLabel: {\n fontSize: 14,\n },\n buttonLabel: {\n textTransform: \"none\",\n fontSize: 12,\n },\n formControlRoot: {\n width: \"100%\",\n margin: 0,\n },\n formLabel: {\n fontSize: 14,\n fontWeight: 500,\n marginBottom: theme.spacing(1),\n },\n customInputField: {\n marginTop: theme.spacing(1),\n },\n filterButton: {\n marginLeft: theme.spacing(1),\n },\n queueFilters: {\n padding: theme.spacing(2),\n maxHeight: 400,\n },\n checkbox: {\n padding: 6,\n },\n}));\n\n// minute, hour, day in seconds\nconst minute = 60;\nconst hour = 60 * minute;\nconst day = 24 * hour;\n\nfunction getInitialState(endTimeSec: number, durationSec: number): State {\n let endTimeOption: EndTimeOption = \"real_time\";\n let customEndTime = \"\";\n let durationOption: DurationOption = \"1h\";\n let customDuration = \"\";\n\n const now = currentUnixtime();\n // Account for 1s difference, may just happen to elapse 1s\n // between the parent component's render and this component's render.\n if (now <= endTimeSec && endTimeSec <= now + 1) {\n endTimeOption = \"real_time\";\n } else {\n endTimeOption = \"custom\";\n customEndTime = new Date(endTimeSec * 1000).toISOString();\n }\n\n switch (durationSec) {\n case 1 * hour:\n durationOption = \"1h\";\n break;\n case 6 * hour:\n durationOption = \"6h\";\n break;\n case 1 * day:\n durationOption = \"1d\";\n break;\n case 8 * day:\n durationOption = \"8d\";\n break;\n case 30 * day:\n durationOption = \"30d\";\n break;\n default:\n durationOption = \"custom\";\n customDuration = durationSec + \"s\";\n }\n\n return {\n endTimeOption,\n customEndTime,\n customEndTimeError: \"\",\n durationOption,\n customDuration,\n customDurationError: \"\",\n };\n}\n\nfunction MetricsFetchControls(props: Props) {\n const classes = useStyles();\n\n const [state, setState] = React.useState(\n getInitialState(props.endTimeSec, props.durationSec)\n );\n const [timePopoverAnchorElem, setTimePopoverAnchorElem] =\n React.useState(null);\n\n const [queuePopoverAnchorElem, setQueuePopoverAnchorElem] =\n React.useState(null);\n\n const handleEndTimeOptionChange = (\n event: React.ChangeEvent\n ) => {\n const selectedOpt = (event.target as HTMLInputElement)\n .value as EndTimeOption;\n setState((prevState) => ({\n ...prevState,\n endTimeOption: selectedOpt,\n customEndTime: \"\",\n customEndTimeError: \"\",\n }));\n switch (selectedOpt) {\n case \"real_time\":\n props.onEndTimeChange(currentUnixtime(), /*isEndTimeFixed=*/ false);\n break;\n case \"freeze_at_now\":\n props.onEndTimeChange(currentUnixtime(), /*isEndTimeFixed=*/ true);\n break;\n case \"custom\":\n // No-op\n }\n };\n\n const handleDurationOptionChange = (\n event: React.ChangeEvent\n ) => {\n const selectedOpt = (event.target as HTMLInputElement)\n .value as DurationOption;\n setState((prevState) => ({\n ...prevState,\n durationOption: selectedOpt,\n customDuration: \"\",\n customDurationError: \"\",\n }));\n const isEndTimeFixed = state.endTimeOption !== \"real_time\";\n switch (selectedOpt) {\n case \"1h\":\n props.onDurationChange(1 * hour, isEndTimeFixed);\n break;\n case \"6h\":\n props.onDurationChange(6 * hour, isEndTimeFixed);\n break;\n case \"1d\":\n props.onDurationChange(1 * day, isEndTimeFixed);\n break;\n case \"8d\":\n props.onDurationChange(8 * day, isEndTimeFixed);\n break;\n case \"30d\":\n props.onDurationChange(30 * day, isEndTimeFixed);\n break;\n case \"custom\":\n // No-op\n }\n };\n\n const handleCustomDurationChange = (\n event: React.ChangeEvent\n ) => {\n event.persist(); // https://reactjs.org/docs/legacy-event-pooling.html\n setState((prevState) => ({\n ...prevState,\n customDuration: event.target.value,\n }));\n };\n\n const handleCustomEndTimeChange = (\n event: React.ChangeEvent\n ) => {\n event.persist(); // https://reactjs.org/docs/legacy-event-pooling.html\n setState((prevState) => ({\n ...prevState,\n customEndTime: event.target.value,\n }));\n };\n\n const handleCustomDurationKeyDown = (\n event: React.KeyboardEvent\n ) => {\n if (event.key === \"Enter\") {\n try {\n const d = parseDuration(state.customDuration);\n setState((prevState) => ({\n ...prevState,\n durationOption: \"custom\",\n customDurationError: \"\",\n }));\n props.onDurationChange(d, state.endTimeOption !== \"real_time\");\n } catch (error) {\n setState((prevState) => ({\n ...prevState,\n customDurationError: \"Duration invalid\",\n }));\n }\n }\n };\n\n const handleCustomEndTimeKeyDown = (\n event: React.KeyboardEvent\n ) => {\n if (event.key === \"Enter\") {\n const timeUsecOrNaN = Date.parse(state.customEndTime);\n if (isNaN(timeUsecOrNaN)) {\n setState((prevState) => ({\n ...prevState,\n customEndTimeError: \"End time invalid\",\n }));\n return;\n }\n setState((prevState) => ({\n ...prevState,\n endTimeOption: \"custom\",\n customEndTimeError: \"\",\n }));\n props.onEndTimeChange(\n Math.floor(timeUsecOrNaN / 1000),\n /* isEndTimeFixed= */ true\n );\n }\n };\n\n const handleOpenTimePopover = (\n event: React.MouseEvent\n ) => {\n setTimePopoverAnchorElem(event.currentTarget);\n };\n\n const handleCloseTimePopover = () => {\n setTimePopoverAnchorElem(null);\n };\n\n const handleOpenQueuePopover = (\n event: React.MouseEvent\n ) => {\n setQueuePopoverAnchorElem(event.currentTarget);\n };\n\n const handleCloseQueuePopover = () => {\n setQueuePopoverAnchorElem(null);\n };\n\n const isTimePopoverOpen = Boolean(timePopoverAnchorElem);\n const isQueuePopoverOpen = Boolean(queuePopoverAnchorElem);\n\n React.useEffect(() => {\n if (state.endTimeOption === \"real_time\") {\n const id = setInterval(() => {\n props.onEndTimeChange(currentUnixtime(), /*isEndTimeFixed=*/ false);\n }, props.pollInterval * 1000);\n return () => clearInterval(id);\n }\n });\n\n const shiftBy = (deltaSec: number) => {\n return () => {\n const now = currentUnixtime();\n const endTime = props.endTimeSec + deltaSec;\n if (now <= endTime) {\n setState((prevState) => ({\n ...prevState,\n customEndTime: \"\",\n endTimeOption: \"real_time\",\n }));\n props.onEndTimeChange(now, /*isEndTimeFixed=*/ false);\n return;\n }\n setState((prevState) => ({\n ...prevState,\n endTimeOption: \"custom\",\n customEndTime: new Date(endTime * 1000).toISOString(),\n }));\n props.onEndTimeChange(endTime, /*isEndTimeFixed=*/ true);\n };\n };\n\n return (\n
    \n \n {formatTime(props.endTimeSec)}\n \n
    \n \n {state.endTimeOption === \"real_time\" ? \"Realtime\" : \"Historical\"}:{\" \"}\n {state.durationOption === \"custom\"\n ? state.customDuration\n : state.durationOption}\n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n End Time\n \n \n \n \n \n \n
    \n \n
    \n \n
    \n
    \n \n \n Duration\n \n \n \n \n \n \n \n \n \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n \n \n \n \n
    \n
    \n \n \n \n \n \n \n Queues\n \n \n {props.queues.map((qname) => (\n {\n if (props.selectedQueues.includes(qname)) {\n props.removeQueue(qname);\n } else {\n props.addQueue(qname);\n }\n }}\n name={qname}\n className={classes.checkbox}\n />\n }\n label={qname}\n classes={{ label: classes.formControlLabel }}\n />\n ))}\n \n \n \n
    \n
    \n );\n}\n\n/****************** Helper functions/components *******************/\n\nfunction formatTime(unixtime: number): string {\n const tz = new Date(unixtime * 1000)\n .toLocaleTimeString(\"en-us\", { timeZoneName: \"short\" })\n .split(\" \")[2];\n return dayjs.unix(unixtime).format(\"ddd, DD MMM YYYY HH:mm:ss \") + tz;\n}\n\ninterface RadioInputProps {\n value: string;\n label: string;\n}\n\nfunction RadioInput(props: RadioInputProps) {\n const classes = useStyles();\n return (\n \n }\n label={props.label}\n />\n );\n}\n\ninterface ShiftButtonProps extends ButtonProps {\n text: string;\n onClick: () => void;\n direction: \"left\" | \"right\";\n dense?: boolean;\n}\n\nconst useShiftButtonStyles = makeStyles((theme: Theme) => ({\n root: {\n minWidth: 40,\n fontWeight: (props: ShiftButtonProps) => (props.dense ? 400 : 500),\n },\n label: { fontSize: 12, textTransform: \"none\" },\n iconRoot: {\n marginRight: (props: ShiftButtonProps) =>\n props.direction === \"left\" ? (props.dense ? -8 : -4) : 0,\n marginLeft: (props: ShiftButtonProps) =>\n props.direction === \"right\" ? (props.dense ? -8 : -4) : 0,\n color: (props: ShiftButtonProps) =>\n props.color\n ? props.color\n : theme.palette.grey[isDarkTheme(theme) ? 200 : 700],\n },\n}));\n\nfunction ShiftButton(props: ShiftButtonProps) {\n const classes = useShiftButtonStyles(props);\n return (\n \n {props.direction === \"left\" && (\n \n )}\n {props.text}\n {props.direction === \"right\" && (\n \n )}\n \n );\n}\n\nShiftButton.defaultProps = {\n dense: false,\n};\n\nexport default connect(mapStateToProps)(MetricsFetchControls);\n","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport queryString from \"query-string\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport prettyBytes from \"pretty-bytes\";\nimport { getMetricsAsync } from \"../actions/metricsActions\";\nimport { listQueuesAsync } from \"../actions/queuesActions\";\nimport { AppState } from \"../store\";\nimport QueueMetricsChart from \"../components/QueueMetricsChart\";\nimport Tooltip from \"../components/Tooltip\";\nimport { currentUnixtime } from \"../utils\";\nimport MetricsFetchControls from \"../components/MetricsFetchControls\";\nimport { useQuery } from \"../hooks\";\nimport { PrometheusMetricsResponse } from \"../api\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n marginTop: 30,\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n controlsContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n position: \"fixed\",\n background: theme.palette.background.paper,\n zIndex: theme.zIndex.appBar,\n right: 0,\n top: 64, // app-bar height\n width: \"100%\",\n padding: theme.spacing(2),\n },\n chartInfo: {\n display: \"flex\",\n alignItems: \"center\",\n marginBottom: theme.spacing(1),\n },\n infoIcon: {\n marginLeft: theme.spacing(1),\n color: theme.palette.grey[500],\n cursor: \"pointer\",\n },\n errorMessage: {\n marginLeft: \"auto\",\n display: \"flex\",\n alignItems: \"center\",\n },\n warningIcon: {\n color: \"#ff6700\",\n marginRight: 6,\n },\n}));\n\nfunction mapStateToProps(state: AppState) {\n return {\n loading: state.metrics.loading,\n error: state.metrics.error,\n data: state.metrics.data,\n pollInterval: state.settings.pollInterval,\n queues: state.queues.data.map((q) => q.name),\n };\n}\n\nconst connector = connect(mapStateToProps, {\n getMetricsAsync,\n listQueuesAsync,\n});\ntype Props = ConnectedProps;\n\nconst ENDTIME_URL_PARAM_KEY = \"end\";\nconst DURATION_URL_PARAM_KEY = \"duration\";\n\nfunction MetricsView(props: Props) {\n const classes = useStyles();\n const history = useHistory();\n const query = useQuery();\n\n const endTimeStr = query.get(ENDTIME_URL_PARAM_KEY);\n const endTime = endTimeStr ? parseFloat(endTimeStr) : currentUnixtime(); // default to now\n\n const durationStr = query.get(DURATION_URL_PARAM_KEY);\n const duration = durationStr ? parseFloat(durationStr) : 60 * 60; // default to 1h\n\n const { pollInterval, getMetricsAsync, listQueuesAsync, data } = props;\n\n const [endTimeSec, setEndTimeSec] = React.useState(endTime);\n const [durationSec, setDurationSec] = React.useState(duration);\n const [selectedQueues, setSelectedQueues] = React.useState([]);\n\n const handleEndTimeChange = (endTime: number, isEndTimeFixed: boolean) => {\n const urlQuery = isEndTimeFixed\n ? {\n [ENDTIME_URL_PARAM_KEY]: endTime,\n [DURATION_URL_PARAM_KEY]: durationSec,\n }\n : {\n [DURATION_URL_PARAM_KEY]: durationSec,\n };\n history.push({\n ...history.location,\n search: queryString.stringify(urlQuery),\n });\n setEndTimeSec(endTime);\n };\n\n const handleDurationChange = (duration: number, isEndTimeFixed: boolean) => {\n const urlQuery = isEndTimeFixed\n ? {\n [ENDTIME_URL_PARAM_KEY]: endTimeSec,\n [DURATION_URL_PARAM_KEY]: duration,\n }\n : {\n [DURATION_URL_PARAM_KEY]: duration,\n };\n history.push({\n ...history.location,\n search: queryString.stringify(urlQuery),\n });\n setDurationSec(duration);\n };\n\n const handleAddQueue = (qname: string) => {\n if (selectedQueues.includes(qname)) {\n return;\n }\n setSelectedQueues(selectedQueues.concat(qname));\n };\n\n const handleRemoveQueue = (qname: string) => {\n if (selectedQueues.length === 1) {\n return; // ensure that selected queues doesn't go down to zero once user selected\n }\n if (selectedQueues.length === 0) {\n // when user first select filter (remove once of the queues),\n // we need to lazily initialize the selectedQueues with the rest (all queues but the selected one).\n setSelectedQueues(props.queues.filter((q) => q !== qname));\n return;\n }\n setSelectedQueues(selectedQueues.filter((q) => q !== qname));\n };\n\n React.useEffect(() => {\n listQueuesAsync();\n }, [listQueuesAsync]);\n\n React.useEffect(() => {\n getMetricsAsync(endTimeSec, durationSec, selectedQueues);\n }, [pollInterval, getMetricsAsync, durationSec, endTimeSec, selectedQueues]);\n\n return (\n \n
    \n \n
    \n \n {data?.tasks_processed_per_second && (\n \n \n \n )}\n {data?.tasks_failed_per_second && (\n \n \n \n )}\n {data?.error_rate && (\n \n \n \n )}\n {data?.queue_size && (\n \n \n \n )}\n {data?.queue_latency_seconds && (\n \n val + \"s\"}\n />\n \n )}\n {data?.queue_size && (\n \n {\n try {\n return prettyBytes(val);\n } catch (error) {\n return val + \"B\";\n }\n }}\n />\n \n )}\n {data?.pending_tasks_by_queue && (\n \n \n \n )}\n {data?.retry_tasks_by_queue && (\n \n \n \n )}\n {data?.archived_tasks_by_queue && (\n \n \n \n )}\n \n
    \n );\n}\n\nexport default connector(MetricsView);\n\n/******** Helper components ********/\n\ninterface ChartRowProps {\n title: string;\n description: string;\n metrics: PrometheusMetricsResponse;\n endTime: number;\n startTime: number;\n yAxisTickFormatter?: (val: number) => string;\n}\n\nfunction ChartRow(props: ChartRowProps) {\n const classes = useStyles();\n return (\n <>\n
    \n {props.title}\n {props.description}
    }>\n \n \n {props.metrics.status === \"error\" && (\n
    \n \n \n Failed to get metrics data: {props.metrics.error}\n \n
    \n )}\n \n \n \n );\n}\n","import React from \"react\";\nimport Container from \"@material-ui/core/Container\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n headingText: {\n fontWeight: \"bold\",\n },\n}));\n\nexport default function PageNotFoundView() {\n const classes = useStyles();\n return (\n \n \n \n \n Oops!\n \n \n 404 - Page Not Found\n \n \n \n \n );\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#2f80ed\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m206.548 169.585c-.557-23.718 13.058-45.343 34.682-55.094 29.6-13.347 64.54-.124 77.887 29.477l15.238 12.411.787-19.637c-17.331-38.4361-62.701-55.6064-101.137-38.2754-28.077 12.6594-45.753 40.7374-45.031 71.5204l.722 32.337 7.225 16.025 10.183-23.874z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m107.46 139.032c2.407 5.339 5.56 10.213 9.32 14.511-5.737 1.125-11.386 2.914-16.8471 5.377-38.4362 17.331-55.6065 62.701-38.2754 101.137l15.2377 12.412.7867-19.637c-13.3469-29.601-.1238-64.541 29.4761-77.888 13.93-6.281 29.44-6.923 43.805-1.844l-4.244 11.213 42.371-6.199-27.65-32.7-4.255 11.246c-2.446-.879-4.918-1.63-7.408-2.253-11.712-3.279-21.294-11.514-26.294-22.6-9.274-20.57-.085-44.85 20.484-54.1248 20.57-9.2749 44.85-.0862 54.125 20.4834l16.024-7.2255c-13.259-29.4054-47.969-42.5414-77.374-29.2824s-42.5414 47.9693-29.282 77.3743z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m162.795 298.333c28.076-12.66 45.753-40.737 45.03-71.521l-.721-32.337-17.408 7.85.555 24.89c.557 23.717-13.057 45.343-34.682 55.093-29.6 13.347-64.5399.124-77.8868-29.476l-16.0244 7.225c17.331 38.437 62.7012 55.607 101.1372 38.276z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m289.641 221.854c-13.93 6.281-29.439 6.924-43.805 1.845l4.244-11.213-42.371 6.199 27.65 32.699 4.256-11.245c2.446.879 4.917 1.63 7.407 2.253 11.713 3.278 21.295 11.513 26.294 22.6 9.274 20.57.086 44.85-20.484 54.125-20.569 9.275-44.849.086-54.124-20.484l-16.025 7.226c13.259 29.405 47.969 42.541 77.375 29.282 29.405-13.259 42.541-47.969 29.282-77.374-2.407-5.339-5.561-10.213-9.321-14.511 5.738-1.125 11.386-2.915 16.847-5.377 38.437-17.331 55.607-62.701 38.276-101.137l-16.024 7.225c13.346 29.601.123 64.541-29.477 77.887z\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m517.32 233.008h-80.896l-20.992 52.992h-13.568l67.584-168.96h15.104l67.584 168.96h-13.568zm-4.608-11.776-29.44-73.728-6.144-17.92h-.256l-6.144 17.408-29.44 74.24zm108.05 67.328c-12.971 0-24.235-2.56-33.792-7.68s-16.128-12.544-19.712-22.272l10.496-6.912c2.56 8.533 7.765 14.933 15.616 19.2s17.493 6.4 28.928 6.4c11.605 0 20.651-2.219 27.136-6.656 6.656-4.437 9.984-10.325 9.984-17.664 0-6.315-2.816-11.349-8.448-15.104s-15.531-6.912-29.696-9.472c-17.92-3.243-30.549-7.595-37.888-13.056s-11.008-13.227-11.008-23.296c0-6.656 2.048-12.8 6.144-18.432s9.899-10.069 17.408-13.312 16.043-4.864 25.6-4.864c13.483 0 24.235 2.56 32.256 7.68 8.192 5.12 13.824 12.971 16.896 23.552l-11.008 6.4c-4.779-17.579-17.493-26.368-38.144-26.368-6.827 0-13.056 1.109-18.688 3.328-5.461 2.219-9.813 5.205-13.056 8.96-3.072 3.584-4.608 7.509-4.608 11.776 0 6.997 2.901 12.459 8.704 16.384s16.043 7.168 30.72 9.728c17.408 2.901 29.696 7.083 36.864 12.544s10.752 13.141 10.752 23.04c0 10.923-4.693 19.712-14.08 26.368-9.216 6.485-21.675 9.728-37.376 9.728zm122.732 20.992c-4.779 11.605-10.069 19.712-15.872 24.32-5.803 4.779-13.141 7.168-22.016 7.168-10.581 0-18.688-3.157-24.32-9.472l4.864-11.008c4.096 6.144 10.581 9.216 19.456 9.216 5.973 0 11.008-1.707 15.104-5.12 4.267-3.243 8.192-9.301 11.776-18.176l8.192-20.48-13.312-31.744-40.704-96.256h14.592l39.168 97.024 6.4 17.152 6.912-18.432 37.632-95.744h13.824zm149.444-154.112c14.677 0 26.453 4.096 35.328 12.288 9.045 8.192 13.568 19.968 13.568 35.328v82.944h-12.8v-78.848c0-13.653-3.328-23.808-9.984-30.464s-15.787-9.984-27.392-9.984c-8.192 0-15.787 1.877-22.784 5.632s-12.629 9.216-16.896 16.384c-4.096 7.168-6.144 15.531-6.144 25.088v72.192h-12.8v-128h11.52l.512 25.856c4.096-9.216 10.325-16.213 18.688-20.992 8.533-4.949 18.261-7.424 29.184-7.424zm203.692 2.56v181.76h-12.8v-80.896c-3.93 9.216-9.99 16.469-18.18 21.76s-17.83 7.936-28.93 7.936c-18.09 0-32.42-5.888-43.006-17.664-10.411-11.776-15.616-28.075-15.616-48.896s5.205-37.12 15.616-48.896c10.586-11.776 24.916-17.664 43.006-17.664 11.44 0 21.34 2.816 29.7 8.448 8.36 5.461 14.33 13.056 17.92 22.784l.77-28.672zm-58.37 119.296c13.31 0 23.98-4.437 32-13.312 8.19-9.045 12.71-21.248 13.57-36.608v-10.752c-.69-15.36-5.12-27.477-13.32-36.352-8.19-9.045-18.94-13.568-32.25-13.568-14.85 0-26.46 4.949-34.82 14.848-8.361 9.728-12.542 23.211-12.542 40.448s4.181 30.805 12.542 40.704c8.36 9.728 19.97 14.592 34.82 14.592zm259.93-122.368c14.5 0 26.11 4.096 34.81 12.288 8.71 8.192 13.06 19.712 13.06 34.56v83.712h-7.17v-82.944c0-13.141-3.75-23.296-11.26-30.464s-17.67-10.752-30.47-10.752c-9.21 0-17.66 2.219-25.34 6.656-7.51 4.267-13.48 10.155-17.92 17.664-4.27 7.339-6.4 15.36-6.4 24.064v76.288h-7.17v-82.944c0-13.141-3.75-23.296-11.26-30.464-7.51-7.339-17.67-11.008-30.47-11.008-9.04 0-17.4 2.219-25.08 6.656-7.51 4.267-13.49 10.155-17.92 17.664-4.44 7.339-6.66 15.531-6.66 24.576v75.52h-7.17v-128h6.66l.25 30.464c3.59-10.069 9.99-18.091 19.2-24.064 9.22-5.973 19.8-8.96 31.75-8.96 12.29 0 22.53 2.987 30.72 8.96 8.36 5.973 13.65 14.507 15.87 25.6 3.07-10.411 9.39-18.859 18.94-25.344 9.56-6.485 20.57-9.728 33.03-9.728zm142.29.512c18.61 0 33.2 5.888 43.78 17.664 10.75 11.776 16.13 28.075 16.13 48.896s-5.38 37.12-16.13 48.896c-10.58 11.776-25.17 17.664-43.78 17.664-18.77 0-33.53-5.888-44.28-17.664-10.76-11.947-16.13-28.245-16.13-48.896s5.37-36.864 16.13-48.64c10.75-11.947 25.51-17.92 44.28-17.92zm0 6.144c-16.55 0-29.61 5.376-39.16 16.128-9.39 10.752-14.08 25.515-14.08 44.288s4.69 33.536 14.08 44.288c9.55 10.752 22.61 16.128 39.16 16.128 16.39 0 29.27-5.376 38.66-16.128s14.08-25.515 14.08-44.288-4.69-33.536-14.08-44.288-22.27-16.128-38.66-16.128zm153.9-6.144c14.85 0 26.54 4.096 35.08 12.288 8.7 8.192 13.05 19.712 13.05 34.56v83.712h-7.17v-81.92c0-13.653-3.75-24.149-11.26-31.488s-17.75-11.008-30.72-11.008c-9.22 0-17.66 2.219-25.34 6.656-7.51 4.267-13.49 10.155-17.92 17.664-4.44 7.339-6.66 15.616-6.66 24.832v75.264h-7.17v-128h6.66v30.72c3.58-10.24 9.98-18.347 19.2-24.32 9.21-5.973 19.97-8.96 32.25-8.96z\",\n fill: \"#828282\"\n});\n\nfunction SvgLogoColor(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n height: 397,\n viewBox: \"0 0 1663 397\",\n width: 1663,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoColor);\nexport default __webpack_public_path__ + \"static/media/logo-color.c2b0c1f3.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#f2f2f2\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m206.548 169.585c-.556-23.718 13.058-45.343 34.682-55.094 29.6-13.347 64.54-.124 77.887 29.477l15.238 12.411.787-19.637c-17.331-38.4361-62.701-55.6064-101.137-38.2754-28.077 12.6594-45.753 40.7374-45.031 71.5204l.722 32.337 7.225 16.025 10.183-23.874z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m107.46 139.032c2.407 5.339 5.56 10.213 9.321 14.511-5.738 1.125-11.387 2.914-16.8479 5.377-38.4363 17.331-55.6066 62.701-38.2755 101.137l15.2377 12.412.7867-19.637c-13.3469-29.601-.1238-64.541 29.477-77.888 13.929-6.281 29.439-6.923 43.804-1.844l-4.244 11.213 42.371-6.199-27.649-32.7-4.256 11.246c-2.446-.879-4.917-1.63-7.407-2.253-11.713-3.279-21.295-11.514-26.294-22.6-9.275-20.57-.086-44.85 20.484-54.1248 20.569-9.2749 44.849-.0862 54.124 20.4834l16.024-7.2255c-13.259-29.4054-47.969-42.5414-77.374-29.2824s-42.5413 47.9693-29.282 77.3743z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m162.795 298.333c28.076-12.66 45.753-40.737 45.03-71.521l-.721-32.337-17.408 7.85.555 24.89c.557 23.717-13.057 45.343-34.682 55.093-29.6 13.347-64.5399.124-77.8868-29.476l-16.0244 7.225c17.331 38.437 62.7012 55.607 101.1372 38.276z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m289.641 221.854c-13.929 6.281-29.439 6.924-43.804 1.845l4.243-11.213-42.371 6.199 27.65 32.699 4.256-11.245c2.446.879 4.917 1.63 7.407 2.253 11.713 3.278 21.295 11.513 26.294 22.6 9.274 20.57.086 44.85-20.484 54.125-20.569 9.275-44.849.086-54.124-20.484l-16.025 7.226c13.259 29.405 47.969 42.541 77.375 29.282 29.405-13.259 42.541-47.969 29.282-77.374-2.407-5.339-5.561-10.213-9.321-14.511 5.738-1.125 11.386-2.915 16.848-5.377 38.436-17.331 55.606-62.701 38.275-101.137l-16.024 7.225c13.346 29.601.123 64.541-29.477 77.887z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m517.32 233.008h-80.896l-20.992 52.992h-13.568l67.584-168.96h15.104l67.584 168.96h-13.568zm-4.608-11.776-29.44-73.728-6.144-17.92h-.256l-6.144 17.408-29.44 74.24zm108.05 67.328c-12.971 0-24.235-2.56-33.792-7.68s-16.128-12.544-19.712-22.272l10.496-6.912c2.56 8.533 7.765 14.933 15.616 19.2s17.493 6.4 28.928 6.4c11.605 0 20.651-2.219 27.136-6.656 6.656-4.437 9.984-10.325 9.984-17.664 0-6.315-2.816-11.349-8.448-15.104s-15.531-6.912-29.696-9.472c-17.92-3.243-30.549-7.595-37.888-13.056s-11.008-13.227-11.008-23.296c0-6.656 2.048-12.8 6.144-18.432s9.899-10.069 17.408-13.312 16.043-4.864 25.6-4.864c13.483 0 24.235 2.56 32.256 7.68 8.192 5.12 13.824 12.971 16.896 23.552l-11.008 6.4c-4.779-17.579-17.493-26.368-38.144-26.368-6.827 0-13.056 1.109-18.688 3.328-5.461 2.219-9.813 5.205-13.056 8.96-3.072 3.584-4.608 7.509-4.608 11.776 0 6.997 2.901 12.459 8.704 16.384s16.043 7.168 30.72 9.728c17.408 2.901 29.696 7.083 36.864 12.544s10.752 13.141 10.752 23.04c0 10.923-4.693 19.712-14.08 26.368-9.216 6.485-21.675 9.728-37.376 9.728zm122.732 20.992c-4.779 11.605-10.069 19.712-15.872 24.32-5.803 4.779-13.141 7.168-22.016 7.168-10.581 0-18.688-3.157-24.32-9.472l4.864-11.008c4.096 6.144 10.581 9.216 19.456 9.216 5.973 0 11.008-1.707 15.104-5.12 4.267-3.243 8.192-9.301 11.776-18.176l8.192-20.48-13.312-31.744-40.704-96.256h14.592l39.168 97.024 6.4 17.152 6.912-18.432 37.632-95.744h13.824zm149.444-154.112c14.677 0 26.453 4.096 35.328 12.288 9.045 8.192 13.568 19.968 13.568 35.328v82.944h-12.8v-78.848c0-13.653-3.328-23.808-9.984-30.464s-15.787-9.984-27.392-9.984c-8.192 0-15.787 1.877-22.784 5.632s-12.629 9.216-16.896 16.384c-4.096 7.168-6.144 15.531-6.144 25.088v72.192h-12.8v-128h11.52l.512 25.856c4.096-9.216 10.325-16.213 18.688-20.992 8.533-4.949 18.261-7.424 29.184-7.424zm203.692 2.56v181.76h-12.8v-80.896c-3.93 9.216-9.99 16.469-18.18 21.76s-17.83 7.936-28.93 7.936c-18.09 0-32.42-5.888-43.006-17.664-10.411-11.776-15.616-28.075-15.616-48.896s5.205-37.12 15.616-48.896c10.586-11.776 24.916-17.664 43.006-17.664 11.44 0 21.34 2.816 29.7 8.448 8.36 5.461 14.33 13.056 17.92 22.784l.77-28.672zm-58.37 119.296c13.31 0 23.98-4.437 32-13.312 8.19-9.045 12.71-21.248 13.57-36.608v-10.752c-.69-15.36-5.12-27.477-13.32-36.352-8.19-9.045-18.94-13.568-32.25-13.568-14.85 0-26.46 4.949-34.82 14.848-8.361 9.728-12.542 23.211-12.542 40.448s4.181 30.805 12.542 40.704c8.36 9.728 19.97 14.592 34.82 14.592zm259.93-122.368c14.5 0 26.11 4.096 34.81 12.288 8.71 8.192 13.06 19.712 13.06 34.56v83.712h-7.17v-82.944c0-13.141-3.75-23.296-11.26-30.464s-17.67-10.752-30.47-10.752c-9.21 0-17.66 2.219-25.34 6.656-7.51 4.267-13.48 10.155-17.92 17.664-4.27 7.339-6.4 15.36-6.4 24.064v76.288h-7.17v-82.944c0-13.141-3.75-23.296-11.26-30.464-7.51-7.339-17.67-11.008-30.47-11.008-9.04 0-17.4 2.219-25.08 6.656-7.51 4.267-13.49 10.155-17.92 17.664-4.44 7.339-6.66 15.531-6.66 24.576v75.52h-7.17v-128h6.66l.25 30.464c3.59-10.069 9.99-18.091 19.2-24.064 9.22-5.973 19.8-8.96 31.75-8.96 12.29 0 22.53 2.987 30.72 8.96 8.36 5.973 13.65 14.507 15.87 25.6 3.07-10.411 9.39-18.859 18.94-25.344 9.56-6.485 20.57-9.728 33.03-9.728zm142.29.512c18.61 0 33.2 5.888 43.78 17.664 10.75 11.776 16.13 28.075 16.13 48.896s-5.38 37.12-16.13 48.896c-10.58 11.776-25.17 17.664-43.78 17.664-18.77 0-33.53-5.888-44.28-17.664-10.76-11.947-16.13-28.245-16.13-48.896s5.37-36.864 16.13-48.64c10.75-11.947 25.51-17.92 44.28-17.92zm0 6.144c-16.55 0-29.61 5.376-39.16 16.128-9.39 10.752-14.08 25.515-14.08 44.288s4.69 33.536 14.08 44.288c9.55 10.752 22.61 16.128 39.16 16.128 16.39 0 29.27-5.376 38.66-16.128s14.08-25.515 14.08-44.288-4.69-33.536-14.08-44.288-22.27-16.128-38.66-16.128zm153.9-6.144c14.85 0 26.54 4.096 35.08 12.288 8.7 8.192 13.05 19.712 13.05 34.56v83.712h-7.17v-81.92c0-13.653-3.75-24.149-11.26-31.488s-17.75-11.008-30.72-11.008c-9.22 0-17.66 2.219-25.34 6.656-7.51 4.267-13.49 10.155-17.92 17.664-4.44 7.339-6.66 15.616-6.66 24.832v75.264h-7.17v-128h6.66v30.72c3.58-10.24 9.98-18.347 19.2-24.32 9.21-5.973 19.97-8.96 32.25-8.96z\"\n}));\n\nfunction SvgLogoWhite(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n fill: \"none\",\n height: 397,\n viewBox: \"0 0 1663 397\",\n width: 1663,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoWhite);\nexport default __webpack_public_path__ + \"static/media/logo-white.3fa2ac55.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport { connect, ConnectedProps } from \"react-redux\";\nimport clsx from \"clsx\";\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\nimport { makeStyles, Theme, ThemeProvider } from \"@material-ui/core/styles\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport SnackbarContent from \"@material-ui/core/SnackbarContent\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Slide from \"@material-ui/core/Slide\";\nimport { TransitionProps } from \"@material-ui/core/transitions\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport BarChartIcon from \"@material-ui/icons/BarChart\";\nimport LayersIcon from \"@material-ui/icons/Layers\";\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport ScheduleIcon from \"@material-ui/icons/Schedule\";\nimport FeedbackIcon from \"@material-ui/icons/Feedback\";\nimport TimelineIcon from \"@material-ui/icons/Timeline\";\nimport DoubleArrowIcon from \"@material-ui/icons/DoubleArrow\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { AppState } from \"./store\";\nimport { paths as getPaths } from \"./paths\";\nimport { isDarkTheme, useTheme } from \"./theme\";\nimport { closeSnackbar } from \"./actions/snackbarActions\";\nimport { toggleDrawer } from \"./actions/settingsActions\";\nimport ListItemLink from \"./components/ListItemLink\";\nimport SchedulersView from \"./views/SchedulersView\";\nimport DashboardView from \"./views/DashboardView\";\nimport TasksView from \"./views/TasksView\";\nimport TaskDetailsView from \"./views/TaskDetailsView\";\nimport SettingsView from \"./views/SettingsView\";\nimport ServersView from \"./views/ServersView\";\nimport RedisInfoView from \"./views/RedisInfoView\";\nimport MetricsView from \"./views/MetricsView\";\nimport PageNotFoundView from \"./views/PageNotFoundView\";\nimport { ReactComponent as Logo } from \"./images/logo-color.svg\";\nimport { ReactComponent as LogoDarkTheme } from \"./images/logo-white.svg\";\n\nconst drawerWidth = 220;\n\n// FIXME: For some reason, the following code does not work:\n// makeStyles(theme => ({ /* use theme here */}));\n// Using closure to work around this problem.\nconst useStyles = (theme: Theme) =>\n makeStyles({\n root: {\n display: \"flex\",\n },\n toolbar: {\n paddingRight: 24, // keep right padding when drawer closed\n },\n toolbarIcon: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: \"0 8px\",\n ...theme.mixins.toolbar,\n },\n appBar: {\n backgroundColor: theme.palette.background.paper,\n zIndex: theme.zIndex.drawer + 1,\n },\n menuButton: {\n marginRight: theme.spacing(1),\n color: isDarkTheme(theme)\n ? theme.palette.grey[100]\n : theme.palette.grey[700],\n },\n menuButtonHidden: {\n display: \"none\",\n },\n drawerPaper: {\n position: \"relative\",\n whiteSpace: \"nowrap\",\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n border: \"none\",\n },\n drawerPaperClose: {\n overflowX: \"hidden\",\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n width: theme.spacing(7),\n [theme.breakpoints.up(\"sm\")]: {\n width: theme.spacing(9),\n },\n },\n snackbar: {\n background: theme.palette.grey[\"A400\"],\n color: \"#ffffff\",\n },\n snackbarCloseIcon: {\n color: theme.palette.grey[400],\n },\n appBarSpacer: theme.mixins.toolbar,\n mainContainer: {\n display: \"flex\",\n width: \"100vw\",\n },\n content: {\n flex: 1,\n height: \"100vh\",\n overflow: \"hidden\",\n background: theme.palette.background.paper,\n },\n contentWrapper: {\n height: \"100%\",\n display: \"flex\",\n paddingTop: \"64px\", // app-bar height\n overflow: \"scroll\",\n },\n sidebarContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n height: \"100%\",\n flexDirection: \"column\",\n },\n listItem: {\n borderTopRightRadius: \"24px\",\n borderBottomRightRadius: \"24px\",\n },\n });\n\nfunction mapStateToProps(state: AppState) {\n return {\n snackbar: state.snackbar,\n themePreference: state.settings.themePreference,\n isDrawerOpen: state.settings.isDrawerOpen,\n };\n}\n\nconst mapDispatchToProps = {\n closeSnackbar,\n toggleDrawer,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nfunction SlideUpTransition(props: TransitionProps) {\n return ;\n}\n\nfunction App(props: ConnectedProps) {\n const theme = useTheme(props.themePreference);\n const classes = useStyles(theme)();\n const paths = getPaths();\n return (\n \n \n
    \n \n \n \n \n \n {isDarkTheme(theme) ? (\n \n ) : (\n \n )}\n \n \n
    \n \n \n \n \n \n }\n />\n \n
    \n
    \n \n
    \n }\n />\n }\n />\n }\n />\n }\n />\n {window.PROMETHEUS_SERVER_ADDRESS && (\n }\n />\n )}\n
    \n
    \n \n }\n />\n \n \n \n \n \n \n \n
    \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n );\n}\n\nexport default connector(App);\n","import {\n GroupsActionTypes,\n LIST_GROUPS_SUCCESS,\n} from \"../actions/groupsActions\";\nimport {\n LIST_QUEUES_SUCCESS,\n LIST_QUEUES_BEGIN,\n QueuesActionTypes,\n PAUSE_QUEUE_BEGIN,\n PAUSE_QUEUE_SUCCESS,\n PAUSE_QUEUE_ERROR,\n RESUME_QUEUE_BEGIN,\n RESUME_QUEUE_ERROR,\n RESUME_QUEUE_SUCCESS,\n DELETE_QUEUE_BEGIN,\n DELETE_QUEUE_ERROR,\n DELETE_QUEUE_SUCCESS,\n LIST_QUEUES_ERROR,\n} from \"../actions/queuesActions\";\nimport {\n BATCH_DELETE_ARCHIVED_TASKS_SUCCESS,\n BATCH_DELETE_RETRY_TASKS_SUCCESS,\n BATCH_DELETE_SCHEDULED_TASKS_SUCCESS,\n BATCH_ARCHIVE_RETRY_TASKS_SUCCESS,\n BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS,\n BATCH_RUN_ARCHIVED_TASKS_SUCCESS,\n BATCH_RUN_RETRY_TASKS_SUCCESS,\n BATCH_RUN_SCHEDULED_TASKS_SUCCESS,\n DELETE_ALL_ARCHIVED_TASKS_SUCCESS,\n DELETE_ALL_RETRY_TASKS_SUCCESS,\n DELETE_ALL_SCHEDULED_TASKS_SUCCESS,\n DELETE_ARCHIVED_TASK_SUCCESS,\n DELETE_RETRY_TASK_SUCCESS,\n DELETE_SCHEDULED_TASK_SUCCESS,\n ARCHIVE_ALL_RETRY_TASKS_SUCCESS,\n ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS,\n ARCHIVE_RETRY_TASK_SUCCESS,\n ARCHIVE_SCHEDULED_TASK_SUCCESS,\n LIST_ACTIVE_TASKS_SUCCESS,\n LIST_ARCHIVED_TASKS_SUCCESS,\n LIST_PENDING_TASKS_SUCCESS,\n LIST_RETRY_TASKS_SUCCESS,\n LIST_SCHEDULED_TASKS_SUCCESS,\n RUN_ALL_ARCHIVED_TASKS_SUCCESS,\n RUN_ALL_RETRY_TASKS_SUCCESS,\n RUN_ALL_SCHEDULED_TASKS_SUCCESS,\n RUN_ARCHIVED_TASK_SUCCESS,\n RUN_RETRY_TASK_SUCCESS,\n RUN_SCHEDULED_TASK_SUCCESS,\n TasksActionTypes,\n ARCHIVE_PENDING_TASK_SUCCESS,\n DELETE_PENDING_TASK_SUCCESS,\n BATCH_ARCHIVE_PENDING_TASKS_SUCCESS,\n BATCH_DELETE_PENDING_TASKS_SUCCESS,\n ARCHIVE_ALL_PENDING_TASKS_SUCCESS,\n DELETE_ALL_PENDING_TASKS_SUCCESS,\n DELETE_COMPLETED_TASK_SUCCESS,\n DELETE_ALL_COMPLETED_TASKS_SUCCESS,\n BATCH_DELETE_COMPLETED_TASKS_SUCCESS,\n DELETE_ALL_AGGREGATING_TASKS_SUCCESS,\n ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS,\n RUN_ALL_AGGREGATING_TASKS_SUCCESS,\n BATCH_DELETE_AGGREGATING_TASKS_SUCCESS,\n BATCH_RUN_AGGREGATING_TASKS_SUCCESS,\n BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS,\n DELETE_AGGREGATING_TASK_SUCCESS,\n RUN_AGGREGATING_TASK_SUCCESS,\n ARCHIVE_AGGREGATING_TASK_SUCCESS,\n LIST_AGGREGATING_TASKS_SUCCESS,\n} from \"../actions/tasksActions\";\nimport { Queue } from \"../api\";\n\ninterface QueuesState {\n loading: boolean;\n data: QueueInfo[];\n error: string;\n}\n\nexport interface QueueInfo {\n name: string; // name of the queue.\n currentStats: Queue;\n requestPending: boolean; // indicates pause/resume/delete action is pending on this queue\n}\n\nconst initialState: QueuesState = { data: [], loading: false, error: \"\" };\n\nfunction queuesReducer(\n state = initialState,\n action: QueuesActionTypes | TasksActionTypes | GroupsActionTypes\n): QueuesState {\n switch (action.type) {\n case LIST_QUEUES_BEGIN:\n return { ...state, loading: true };\n\n case LIST_QUEUES_SUCCESS:\n const { queues } = action.payload;\n return {\n ...state,\n loading: false,\n error: \"\",\n data: queues.map((q: Queue) => ({\n name: q.queue,\n currentStats: q,\n requestPending: false,\n })),\n };\n\n case LIST_QUEUES_ERROR:\n return {\n ...state,\n loading: false,\n error: action.error,\n };\n\n case DELETE_QUEUE_BEGIN:\n case PAUSE_QUEUE_BEGIN:\n case RESUME_QUEUE_BEGIN: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return { ...queueInfo, requestPending: true };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_QUEUE_SUCCESS: {\n const newData = state.data.filter(\n (queueInfo) => queueInfo.name !== action.queue\n );\n return { ...state, data: newData };\n }\n\n case PAUSE_QUEUE_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n requestPending: false,\n currentStats: { ...queueInfo.currentStats, paused: true },\n };\n });\n return { ...state, data: newData };\n }\n\n case RESUME_QUEUE_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n requestPending: false,\n currentStats: { ...queueInfo.currentStats, paused: false },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_QUEUE_ERROR:\n case PAUSE_QUEUE_ERROR:\n case RESUME_QUEUE_ERROR: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n requestPending: false,\n };\n });\n return { ...state, data: newData };\n }\n\n case LIST_ACTIVE_TASKS_SUCCESS:\n case LIST_PENDING_TASKS_SUCCESS:\n case LIST_AGGREGATING_TASKS_SUCCESS:\n case LIST_SCHEDULED_TASKS_SUCCESS:\n case LIST_RETRY_TASKS_SUCCESS:\n case LIST_ARCHIVED_TASKS_SUCCESS: {\n const newData = state.data\n .filter((queueInfo) => queueInfo.name !== action.queue)\n .concat({\n name: action.queue,\n currentStats: action.payload.stats,\n requestPending: false,\n });\n return { ...state, data: newData };\n }\n\n case RUN_AGGREGATING_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending: queueInfo.currentStats.pending + 1,\n aggregating: queueInfo.currentStats.aggregating - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case RUN_SCHEDULED_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending: queueInfo.currentStats.pending + 1,\n scheduled: queueInfo.currentStats.scheduled - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case RUN_RETRY_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending: queueInfo.currentStats.pending + 1,\n retry: queueInfo.currentStats.retry - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case RUN_ARCHIVED_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending: queueInfo.currentStats.pending + 1,\n archived: queueInfo.currentStats.archived - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_PENDING_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived: queueInfo.currentStats.archived + 1,\n pending: queueInfo.currentStats.pending - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_AGGREGATING_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived: queueInfo.currentStats.archived + 1,\n aggregating: queueInfo.currentStats.aggregating - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_SCHEDULED_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived: queueInfo.currentStats.archived + 1,\n scheduled: queueInfo.currentStats.scheduled - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_RETRY_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived: queueInfo.currentStats.archived + 1,\n retry: queueInfo.currentStats.retry - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_PENDING_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - 1,\n pending: queueInfo.currentStats.pending - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_SCHEDULED_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - 1,\n scheduled: queueInfo.currentStats.scheduled - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_AGGREGATING_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - 1,\n aggregating: queueInfo.currentStats.aggregating - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_ARCHIVE_PENDING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived:\n queueInfo.currentStats.archived +\n action.payload.archived_ids.length,\n pending:\n queueInfo.currentStats.pending -\n action.payload.archived_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_DELETE_PENDING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size:\n queueInfo.currentStats.size - action.payload.deleted_ids.length,\n pending:\n queueInfo.currentStats.pending -\n action.payload.deleted_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_ALL_PENDING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived:\n queueInfo.currentStats.archived + queueInfo.currentStats.pending,\n pending: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n groups: queueInfo.currentStats.groups - 1,\n archived: queueInfo.currentStats.archived + action.archived,\n aggregating: queueInfo.currentStats.aggregating - action.archived,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_ALL_PENDING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - action.deleted,\n pending: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_RUN_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending:\n queueInfo.currentStats.pending +\n action.payload.pending_ids.length,\n scheduled:\n queueInfo.currentStats.scheduled -\n action.payload.pending_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived:\n queueInfo.currentStats.archived +\n action.payload.archived_ids.length,\n scheduled:\n queueInfo.currentStats.scheduled -\n action.payload.archived_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_DELETE_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size:\n queueInfo.currentStats.size - action.payload.deleted_ids.length,\n scheduled:\n queueInfo.currentStats.scheduled -\n action.payload.deleted_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case RUN_ALL_AGGREGATING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n groups: queueInfo.currentStats.groups - 1,\n pending: queueInfo.currentStats.pending + action.scheduled,\n aggregating: queueInfo.currentStats.aggregating - action.scheduled,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case RUN_ALL_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending:\n queueInfo.currentStats.pending + queueInfo.currentStats.scheduled,\n scheduled: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived:\n queueInfo.currentStats.archived +\n queueInfo.currentStats.scheduled,\n scheduled: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_ALL_AGGREGATING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - action.deleted,\n groups: queueInfo.currentStats.groups - 1,\n aggregating: queueInfo.currentStats.aggregating - action.deleted,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_ALL_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - action.deleted,\n scheduled: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_RETRY_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - 1,\n retry: queueInfo.currentStats.retry - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_RUN_RETRY_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending:\n queueInfo.currentStats.pending +\n action.payload.pending_ids.length,\n retry:\n queueInfo.currentStats.retry - action.payload.pending_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_ARCHIVE_RETRY_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived:\n queueInfo.currentStats.pending +\n action.payload.archived_ids.length,\n retry:\n queueInfo.currentStats.retry - action.payload.archived_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_DELETE_RETRY_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size:\n queueInfo.currentStats.size - action.payload.deleted_ids.length,\n retry:\n queueInfo.currentStats.retry - action.payload.deleted_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_RUN_AGGREGATING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending:\n queueInfo.currentStats.pending +\n action.payload.pending_ids.length,\n aggregating:\n queueInfo.currentStats.aggregating -\n action.payload.pending_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived:\n queueInfo.currentStats.archived +\n action.payload.archived_ids.length,\n aggregating:\n queueInfo.currentStats.aggregating -\n action.payload.archived_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_DELETE_AGGREGATING_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size:\n queueInfo.currentStats.size - action.payload.deleted_ids.length,\n aggregating:\n queueInfo.currentStats.aggregating -\n action.payload.deleted_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case RUN_ALL_RETRY_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending:\n queueInfo.currentStats.pending + queueInfo.currentStats.retry,\n retry: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case ARCHIVE_ALL_RETRY_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n archived:\n queueInfo.currentStats.archived + queueInfo.currentStats.retry,\n retry: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_ALL_RETRY_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - action.deleted,\n retry: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_ARCHIVED_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - 1,\n archived: queueInfo.currentStats.archived - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_COMPLETED_TASK_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - 1,\n completed: queueInfo.currentStats.completed - 1,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_RUN_ARCHIVED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending:\n queueInfo.currentStats.pending +\n action.payload.pending_ids.length,\n archived:\n queueInfo.currentStats.archived -\n action.payload.pending_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_DELETE_ARCHIVED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size:\n queueInfo.currentStats.size - action.payload.deleted_ids.length,\n archived:\n queueInfo.currentStats.archived -\n action.payload.deleted_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case BATCH_DELETE_COMPLETED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size:\n queueInfo.currentStats.size - action.payload.deleted_ids.length,\n completed:\n queueInfo.currentStats.completed -\n action.payload.deleted_ids.length,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case RUN_ALL_ARCHIVED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n pending:\n queueInfo.currentStats.pending + queueInfo.currentStats.archived,\n archived: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_ALL_ARCHIVED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - action.deleted,\n archived: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case DELETE_ALL_COMPLETED_TASKS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: {\n ...queueInfo.currentStats,\n size: queueInfo.currentStats.size - action.deleted,\n completed: 0,\n },\n };\n });\n return { ...state, data: newData };\n }\n\n case LIST_GROUPS_SUCCESS: {\n const newData = state.data.map((queueInfo) => {\n if (queueInfo.name !== action.queue) {\n return queueInfo;\n }\n return {\n ...queueInfo,\n currentStats: action.payload.stats,\n };\n });\n return { ...state, data: newData };\n }\n\n default:\n return state;\n }\n}\n\nexport default queuesReducer;\n","import {\n LIST_ACTIVE_TASKS_BEGIN,\n LIST_ACTIVE_TASKS_SUCCESS,\n LIST_ACTIVE_TASKS_ERROR,\n TasksActionTypes,\n LIST_PENDING_TASKS_BEGIN,\n LIST_PENDING_TASKS_SUCCESS,\n LIST_PENDING_TASKS_ERROR,\n LIST_SCHEDULED_TASKS_BEGIN,\n LIST_SCHEDULED_TASKS_SUCCESS,\n LIST_SCHEDULED_TASKS_ERROR,\n LIST_RETRY_TASKS_BEGIN,\n LIST_RETRY_TASKS_SUCCESS,\n LIST_RETRY_TASKS_ERROR,\n LIST_ARCHIVED_TASKS_BEGIN,\n LIST_ARCHIVED_TASKS_SUCCESS,\n LIST_ARCHIVED_TASKS_ERROR,\n LIST_COMPLETED_TASKS_BEGIN,\n LIST_COMPLETED_TASKS_SUCCESS,\n LIST_COMPLETED_TASKS_ERROR,\n CANCEL_ACTIVE_TASK_BEGIN,\n CANCEL_ACTIVE_TASK_SUCCESS,\n CANCEL_ACTIVE_TASK_ERROR,\n DELETE_RETRY_TASK_BEGIN,\n DELETE_RETRY_TASK_SUCCESS,\n DELETE_RETRY_TASK_ERROR,\n DELETE_SCHEDULED_TASK_BEGIN,\n DELETE_SCHEDULED_TASK_SUCCESS,\n DELETE_SCHEDULED_TASK_ERROR,\n DELETE_ARCHIVED_TASK_BEGIN,\n DELETE_ARCHIVED_TASK_SUCCESS,\n DELETE_ARCHIVED_TASK_ERROR,\n BATCH_DELETE_ARCHIVED_TASKS_BEGIN,\n BATCH_DELETE_ARCHIVED_TASKS_SUCCESS,\n BATCH_DELETE_ARCHIVED_TASKS_ERROR,\n RUN_ARCHIVED_TASK_BEGIN,\n RUN_ARCHIVED_TASK_SUCCESS,\n RUN_ARCHIVED_TASK_ERROR,\n BATCH_RUN_ARCHIVED_TASKS_BEGIN,\n BATCH_RUN_ARCHIVED_TASKS_ERROR,\n BATCH_RUN_ARCHIVED_TASKS_SUCCESS,\n DELETE_ALL_ARCHIVED_TASKS_BEGIN,\n DELETE_ALL_ARCHIVED_TASKS_SUCCESS,\n DELETE_ALL_ARCHIVED_TASKS_ERROR,\n RUN_ALL_ARCHIVED_TASKS_BEGIN,\n RUN_ALL_ARCHIVED_TASKS_ERROR,\n RUN_ALL_ARCHIVED_TASKS_SUCCESS,\n BATCH_DELETE_RETRY_TASKS_ERROR,\n BATCH_RUN_RETRY_TASKS_ERROR,\n BATCH_DELETE_RETRY_TASKS_SUCCESS,\n BATCH_RUN_RETRY_TASKS_SUCCESS,\n BATCH_DELETE_RETRY_TASKS_BEGIN,\n BATCH_RUN_RETRY_TASKS_BEGIN,\n DELETE_ALL_RETRY_TASKS_ERROR,\n RUN_ALL_RETRY_TASKS_ERROR,\n DELETE_ALL_RETRY_TASKS_SUCCESS,\n RUN_ALL_RETRY_TASKS_SUCCESS,\n DELETE_ALL_RETRY_TASKS_BEGIN,\n RUN_ALL_RETRY_TASKS_BEGIN,\n BATCH_DELETE_SCHEDULED_TASKS_ERROR,\n BATCH_RUN_SCHEDULED_TASKS_ERROR,\n BATCH_DELETE_SCHEDULED_TASKS_SUCCESS,\n BATCH_RUN_SCHEDULED_TASKS_SUCCESS,\n BATCH_DELETE_SCHEDULED_TASKS_BEGIN,\n BATCH_RUN_SCHEDULED_TASKS_BEGIN,\n DELETE_ALL_SCHEDULED_TASKS_ERROR,\n RUN_ALL_SCHEDULED_TASKS_ERROR,\n DELETE_ALL_SCHEDULED_TASKS_SUCCESS,\n RUN_ALL_SCHEDULED_TASKS_SUCCESS,\n DELETE_ALL_SCHEDULED_TASKS_BEGIN,\n RUN_ALL_SCHEDULED_TASKS_BEGIN,\n RUN_RETRY_TASK_BEGIN,\n RUN_RETRY_TASK_SUCCESS,\n RUN_RETRY_TASK_ERROR,\n RUN_SCHEDULED_TASK_BEGIN,\n RUN_SCHEDULED_TASK_SUCCESS,\n RUN_SCHEDULED_TASK_ERROR,\n ARCHIVE_SCHEDULED_TASK_BEGIN,\n ARCHIVE_SCHEDULED_TASK_SUCCESS,\n ARCHIVE_SCHEDULED_TASK_ERROR,\n ARCHIVE_ALL_SCHEDULED_TASKS_BEGIN,\n ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS,\n ARCHIVE_ALL_SCHEDULED_TASKS_ERROR,\n BATCH_ARCHIVE_SCHEDULED_TASKS_BEGIN,\n BATCH_ARCHIVE_SCHEDULED_TASKS_ERROR,\n BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS,\n ARCHIVE_RETRY_TASK_BEGIN,\n ARCHIVE_RETRY_TASK_SUCCESS,\n ARCHIVE_RETRY_TASK_ERROR,\n ARCHIVE_ALL_RETRY_TASKS_BEGIN,\n ARCHIVE_ALL_RETRY_TASKS_SUCCESS,\n ARCHIVE_ALL_RETRY_TASKS_ERROR,\n BATCH_ARCHIVE_RETRY_TASKS_SUCCESS,\n BATCH_ARCHIVE_RETRY_TASKS_BEGIN,\n BATCH_ARCHIVE_RETRY_TASKS_ERROR,\n BATCH_CANCEL_ACTIVE_TASKS_BEGIN,\n BATCH_CANCEL_ACTIVE_TASKS_SUCCESS,\n BATCH_CANCEL_ACTIVE_TASKS_ERROR,\n CANCEL_ALL_ACTIVE_TASKS_BEGIN,\n CANCEL_ALL_ACTIVE_TASKS_SUCCESS,\n CANCEL_ALL_ACTIVE_TASKS_ERROR,\n ARCHIVE_PENDING_TASK_BEGIN,\n DELETE_PENDING_TASK_BEGIN,\n ARCHIVE_PENDING_TASK_SUCCESS,\n DELETE_PENDING_TASK_SUCCESS,\n ARCHIVE_PENDING_TASK_ERROR,\n DELETE_PENDING_TASK_ERROR,\n ARCHIVE_ALL_PENDING_TASKS_BEGIN,\n DELETE_ALL_PENDING_TASKS_BEGIN,\n ARCHIVE_ALL_PENDING_TASKS_SUCCESS,\n DELETE_ALL_PENDING_TASKS_SUCCESS,\n ARCHIVE_ALL_PENDING_TASKS_ERROR,\n DELETE_ALL_PENDING_TASKS_ERROR,\n BATCH_ARCHIVE_PENDING_TASKS_BEGIN,\n BATCH_DELETE_PENDING_TASKS_BEGIN,\n BATCH_ARCHIVE_PENDING_TASKS_SUCCESS,\n BATCH_DELETE_PENDING_TASKS_SUCCESS,\n BATCH_ARCHIVE_PENDING_TASKS_ERROR,\n BATCH_DELETE_PENDING_TASKS_ERROR,\n GET_TASK_INFO_BEGIN,\n GET_TASK_INFO_ERROR,\n GET_TASK_INFO_SUCCESS,\n DELETE_COMPLETED_TASK_BEGIN,\n DELETE_COMPLETED_TASK_ERROR,\n DELETE_COMPLETED_TASK_SUCCESS,\n DELETE_ALL_COMPLETED_TASKS_BEGIN,\n DELETE_ALL_COMPLETED_TASKS_ERROR,\n DELETE_ALL_COMPLETED_TASKS_SUCCESS,\n BATCH_DELETE_COMPLETED_TASKS_BEGIN,\n BATCH_DELETE_COMPLETED_TASKS_ERROR,\n BATCH_DELETE_COMPLETED_TASKS_SUCCESS,\n LIST_AGGREGATING_TASKS_BEGIN,\n LIST_AGGREGATING_TASKS_SUCCESS,\n LIST_AGGREGATING_TASKS_ERROR,\n DELETE_ALL_AGGREGATING_TASKS_BEGIN,\n DELETE_ALL_AGGREGATING_TASKS_SUCCESS,\n DELETE_ALL_AGGREGATING_TASKS_ERROR,\n ARCHIVE_ALL_AGGREGATING_TASKS_BEGIN,\n ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS,\n ARCHIVE_ALL_AGGREGATING_TASKS_ERROR,\n RUN_ALL_AGGREGATING_TASKS_BEGIN,\n RUN_ALL_AGGREGATING_TASKS_SUCCESS,\n RUN_ALL_AGGREGATING_TASKS_ERROR,\n BATCH_ARCHIVE_AGGREGATING_TASKS_BEGIN,\n BATCH_RUN_AGGREGATING_TASKS_BEGIN,\n BATCH_DELETE_AGGREGATING_TASKS_BEGIN,\n BATCH_RUN_AGGREGATING_TASKS_ERROR,\n BATCH_ARCHIVE_AGGREGATING_TASKS_ERROR,\n BATCH_DELETE_AGGREGATING_TASKS_ERROR,\n BATCH_DELETE_AGGREGATING_TASKS_SUCCESS,\n BATCH_RUN_AGGREGATING_TASKS_SUCCESS,\n BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS,\n RUN_AGGREGATING_TASK_BEGIN,\n ARCHIVE_AGGREGATING_TASK_BEGIN,\n DELETE_AGGREGATING_TASK_BEGIN,\n RUN_AGGREGATING_TASK_ERROR,\n ARCHIVE_AGGREGATING_TASK_ERROR,\n DELETE_AGGREGATING_TASK_ERROR,\n RUN_AGGREGATING_TASK_SUCCESS,\n ARCHIVE_AGGREGATING_TASK_SUCCESS,\n DELETE_AGGREGATING_TASK_SUCCESS,\n} from \"../actions/tasksActions\";\nimport { TaskInfo } from \"../api\";\n\nexport interface TaskInfoExtended extends TaskInfo {\n // Indicates that a request has been sent for this\n // task and awaiting for a response.\n requestPending: boolean;\n\n // Incidates that a cancelation signal has been\n // published for this task.\n //\n // Only applies to active tasks\n canceling?: boolean;\n}\n\ninterface TasksState {\n activeTasks: {\n loading: boolean;\n batchActionPending: boolean;\n allActionPending: boolean;\n error: string;\n data: TaskInfoExtended[];\n };\n pendingTasks: {\n loading: boolean;\n batchActionPending: boolean;\n allActionPending: boolean;\n error: string;\n data: TaskInfoExtended[];\n };\n scheduledTasks: {\n loading: boolean;\n batchActionPending: boolean;\n allActionPending: boolean;\n error: string;\n data: TaskInfoExtended[];\n };\n retryTasks: {\n loading: boolean;\n batchActionPending: boolean;\n allActionPending: boolean;\n error: string;\n data: TaskInfoExtended[];\n };\n archivedTasks: {\n loading: boolean;\n batchActionPending: boolean;\n allActionPending: boolean;\n error: string;\n data: TaskInfoExtended[];\n };\n completedTasks: {\n loading: boolean;\n batchActionPending: boolean;\n allActionPending: boolean;\n error: string;\n data: TaskInfoExtended[];\n };\n aggregatingTasks: {\n group: string;\n loading: boolean;\n batchActionPending: boolean;\n allActionPending: boolean;\n error: string;\n data: TaskInfoExtended[];\n };\n taskInfo: {\n loading: boolean;\n error: string;\n data?: TaskInfo;\n };\n}\n\nconst initialState: TasksState = {\n activeTasks: {\n loading: false,\n batchActionPending: false,\n allActionPending: false,\n error: \"\",\n data: [],\n },\n pendingTasks: {\n loading: false,\n batchActionPending: false,\n allActionPending: false,\n error: \"\",\n data: [],\n },\n scheduledTasks: {\n loading: false,\n batchActionPending: false,\n allActionPending: false,\n error: \"\",\n data: [],\n },\n retryTasks: {\n loading: false,\n batchActionPending: false,\n allActionPending: false,\n error: \"\",\n data: [],\n },\n archivedTasks: {\n loading: false,\n batchActionPending: false,\n allActionPending: false,\n error: \"\",\n data: [],\n },\n completedTasks: {\n loading: false,\n batchActionPending: false,\n allActionPending: false,\n error: \"\",\n data: [],\n },\n aggregatingTasks: {\n group: \"\",\n loading: false,\n batchActionPending: false,\n allActionPending: false,\n error: \"\",\n data: [],\n },\n taskInfo: {\n loading: false,\n error: \"\",\n },\n};\n\nfunction tasksReducer(\n state = initialState,\n action: TasksActionTypes\n): TasksState {\n switch (action.type) {\n case GET_TASK_INFO_BEGIN:\n return {\n ...state,\n taskInfo: {\n ...state.taskInfo,\n loading: true,\n },\n };\n\n case GET_TASK_INFO_ERROR:\n return {\n ...state,\n taskInfo: {\n loading: false,\n error: action.error,\n },\n };\n\n case GET_TASK_INFO_SUCCESS:\n return {\n ...state,\n taskInfo: {\n loading: false,\n error: \"\",\n data: action.payload,\n },\n };\n\n case LIST_ACTIVE_TASKS_BEGIN:\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n loading: true,\n },\n };\n\n case LIST_ACTIVE_TASKS_SUCCESS:\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n loading: false,\n error: \"\",\n data: action.payload.tasks.map((task) => ({\n ...task,\n canceling: false,\n requestPending: false,\n })),\n },\n };\n\n case LIST_ACTIVE_TASKS_ERROR:\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n loading: false,\n error: action.error,\n data: [],\n },\n };\n\n case LIST_PENDING_TASKS_BEGIN:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n loading: true,\n },\n };\n\n case LIST_PENDING_TASKS_SUCCESS:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n loading: false,\n error: \"\",\n data: action.payload.tasks.map((task) => ({\n ...task,\n requestPending: false,\n })),\n },\n };\n\n case LIST_PENDING_TASKS_ERROR:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n loading: false,\n error: action.error,\n data: [],\n },\n };\n\n case LIST_SCHEDULED_TASKS_BEGIN:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n loading: true,\n },\n };\n\n case LIST_SCHEDULED_TASKS_SUCCESS:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n loading: false,\n error: \"\",\n data: action.payload.tasks.map((task) => ({\n ...task,\n requestPending: false,\n })),\n },\n };\n\n case LIST_SCHEDULED_TASKS_ERROR:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n loading: false,\n error: action.error,\n data: [],\n },\n };\n\n case LIST_RETRY_TASKS_BEGIN:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n loading: true,\n },\n };\n\n case LIST_RETRY_TASKS_SUCCESS:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n loading: false,\n error: \"\",\n data: action.payload.tasks.map((task) => ({\n ...task,\n requestPending: false,\n })),\n },\n };\n\n case LIST_RETRY_TASKS_ERROR:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n loading: false,\n error: action.error,\n data: [],\n },\n };\n\n case LIST_ARCHIVED_TASKS_BEGIN:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n loading: true,\n },\n };\n\n case LIST_ARCHIVED_TASKS_SUCCESS:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n loading: false,\n error: \"\",\n data: action.payload.tasks.map((task) => ({\n ...task,\n requestPending: false,\n })),\n },\n };\n\n case LIST_ARCHIVED_TASKS_ERROR:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n loading: false,\n error: action.error,\n data: [],\n },\n };\n\n case LIST_COMPLETED_TASKS_BEGIN:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n loading: true,\n },\n };\n\n case LIST_COMPLETED_TASKS_SUCCESS:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n loading: false,\n error: \"\",\n data: action.payload.tasks.map((task) => ({\n ...task,\n requestPending: false,\n })),\n },\n };\n\n case LIST_COMPLETED_TASKS_ERROR:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n loading: false,\n error: action.error,\n data: [],\n },\n };\n\n case LIST_AGGREGATING_TASKS_BEGIN:\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n group: action.group,\n loading: true,\n },\n };\n\n case LIST_AGGREGATING_TASKS_SUCCESS:\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n group: action.group,\n loading: false,\n error: \"\",\n data: action.payload.tasks.map((task) => ({\n ...task,\n requestPending: false,\n })),\n },\n };\n\n case LIST_AGGREGATING_TASKS_ERROR:\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n group: action.group,\n loading: false,\n error: action.error,\n data: [],\n },\n };\n\n case DELETE_COMPLETED_TASK_BEGIN:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n data: state.completedTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: true };\n }),\n },\n };\n\n case DELETE_COMPLETED_TASK_SUCCESS:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n data: state.completedTasks.data.filter(\n (task) => task.id !== action.taskId\n ),\n },\n };\n\n case DELETE_COMPLETED_TASK_ERROR:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n data: state.completedTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false };\n }),\n },\n };\n\n case DELETE_ALL_COMPLETED_TASKS_BEGIN:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n allActionPending: true,\n },\n };\n\n case DELETE_ALL_COMPLETED_TASKS_SUCCESS:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n allActionPending: false,\n data: [],\n },\n };\n\n case DELETE_ALL_COMPLETED_TASKS_ERROR:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n allActionPending: false,\n },\n };\n\n case BATCH_DELETE_COMPLETED_TASKS_BEGIN:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n batchActionPending: true,\n data: state.completedTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: true,\n };\n }),\n },\n };\n\n case BATCH_DELETE_COMPLETED_TASKS_SUCCESS: {\n const newData = state.completedTasks.data.filter(\n (task) => !action.payload.deleted_ids.includes(task.id)\n );\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_DELETE_COMPLETED_TASKS_ERROR:\n return {\n ...state,\n completedTasks: {\n ...state.completedTasks,\n batchActionPending: false,\n data: state.completedTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: false,\n };\n }),\n },\n };\n\n case CANCEL_ACTIVE_TASK_BEGIN: {\n const newData = state.activeTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: true };\n });\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n data: newData,\n },\n };\n }\n\n case CANCEL_ACTIVE_TASK_SUCCESS: {\n const newData = state.activeTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false, canceling: true };\n });\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n data: newData,\n },\n };\n }\n\n case CANCEL_ACTIVE_TASK_ERROR:\n const newData = state.activeTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false };\n });\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n data: newData,\n },\n };\n\n case BATCH_CANCEL_ACTIVE_TASKS_BEGIN: {\n const newData = state.activeTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return { ...task, requestPending: true };\n });\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n batchActionPending: true,\n data: newData,\n },\n };\n }\n\n case BATCH_CANCEL_ACTIVE_TASKS_SUCCESS: {\n const newData = state.activeTasks.data.map((task) => {\n if (action.payload.canceled_ids.includes(task.id)) {\n return { ...task, canceling: true, requestPending: false };\n }\n if (action.payload.error_ids.includes(task.id)) {\n return { ...task, requestPending: false };\n }\n return task;\n });\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_CANCEL_ACTIVE_TASKS_ERROR: {\n const newData = state.activeTasks.data.map((task) => {\n return { ...task, requestPending: false };\n });\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case CANCEL_ALL_ACTIVE_TASKS_BEGIN: {\n const newData = state.activeTasks.data.map((task) => ({\n ...task,\n requestPending: true,\n }));\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n allActionPending: true,\n data: newData,\n },\n };\n }\n\n case CANCEL_ALL_ACTIVE_TASKS_SUCCESS: {\n const newData = state.activeTasks.data.map((task) => ({\n ...task,\n requestPending: false,\n canceling: true,\n }));\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n allActionPending: false,\n data: newData,\n },\n };\n }\n\n case CANCEL_ALL_ACTIVE_TASKS_ERROR: {\n const newData = state.activeTasks.data.map((task) => ({\n ...task,\n requestPending: false,\n }));\n return {\n ...state,\n activeTasks: {\n ...state.activeTasks,\n allActionPending: false,\n data: newData,\n },\n };\n }\n\n case ARCHIVE_PENDING_TASK_BEGIN:\n case DELETE_PENDING_TASK_BEGIN:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n data: state.pendingTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: true };\n }),\n },\n };\n\n case ARCHIVE_PENDING_TASK_SUCCESS:\n case DELETE_PENDING_TASK_SUCCESS:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n data: state.pendingTasks.data.filter(\n (task) => task.id !== action.taskId\n ),\n },\n };\n\n case ARCHIVE_PENDING_TASK_ERROR:\n case DELETE_PENDING_TASK_ERROR:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n data: state.pendingTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false };\n }),\n },\n };\n\n case ARCHIVE_ALL_PENDING_TASKS_BEGIN:\n case DELETE_ALL_PENDING_TASKS_BEGIN:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n allActionPending: true,\n },\n };\n\n case ARCHIVE_ALL_PENDING_TASKS_SUCCESS:\n case DELETE_ALL_PENDING_TASKS_SUCCESS:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n allActionPending: false,\n data: [],\n },\n };\n\n case ARCHIVE_ALL_PENDING_TASKS_ERROR:\n case DELETE_ALL_PENDING_TASKS_ERROR:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n allActionPending: false,\n },\n };\n\n case BATCH_ARCHIVE_PENDING_TASKS_BEGIN:\n case BATCH_DELETE_PENDING_TASKS_BEGIN:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n batchActionPending: true,\n data: state.pendingTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: true,\n };\n }),\n },\n };\n\n case BATCH_ARCHIVE_PENDING_TASKS_SUCCESS: {\n const newData = state.pendingTasks.data.filter(\n (task) => !action.payload.archived_ids.includes(task.id)\n );\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_DELETE_PENDING_TASKS_SUCCESS: {\n const newData = state.pendingTasks.data.filter(\n (task) => !action.payload.deleted_ids.includes(task.id)\n );\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_ARCHIVE_PENDING_TASKS_ERROR:\n case BATCH_DELETE_PENDING_TASKS_ERROR:\n return {\n ...state,\n pendingTasks: {\n ...state.pendingTasks,\n batchActionPending: false,\n data: state.pendingTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: false,\n };\n }),\n },\n };\n\n case RUN_SCHEDULED_TASK_BEGIN:\n case ARCHIVE_SCHEDULED_TASK_BEGIN:\n case DELETE_SCHEDULED_TASK_BEGIN:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n data: state.scheduledTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: true };\n }),\n },\n };\n\n case RUN_SCHEDULED_TASK_SUCCESS:\n case ARCHIVE_SCHEDULED_TASK_SUCCESS:\n case DELETE_SCHEDULED_TASK_SUCCESS:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n data: state.scheduledTasks.data.filter(\n (task) => task.id !== action.taskId\n ),\n },\n };\n\n case RUN_SCHEDULED_TASK_ERROR:\n case ARCHIVE_SCHEDULED_TASK_ERROR:\n case DELETE_SCHEDULED_TASK_ERROR:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n data: state.scheduledTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false };\n }),\n },\n };\n\n case RUN_ALL_SCHEDULED_TASKS_BEGIN:\n case ARCHIVE_ALL_SCHEDULED_TASKS_BEGIN:\n case DELETE_ALL_SCHEDULED_TASKS_BEGIN:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n allActionPending: true,\n },\n };\n\n case RUN_ALL_SCHEDULED_TASKS_SUCCESS:\n case ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS:\n case DELETE_ALL_SCHEDULED_TASKS_SUCCESS:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n allActionPending: false,\n data: [],\n },\n };\n\n case RUN_ALL_SCHEDULED_TASKS_ERROR:\n case ARCHIVE_ALL_SCHEDULED_TASKS_ERROR:\n case DELETE_ALL_SCHEDULED_TASKS_ERROR:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n allActionPending: false,\n },\n };\n\n case BATCH_RUN_SCHEDULED_TASKS_BEGIN:\n case BATCH_ARCHIVE_SCHEDULED_TASKS_BEGIN:\n case BATCH_DELETE_SCHEDULED_TASKS_BEGIN:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n batchActionPending: true,\n data: state.scheduledTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: true,\n };\n }),\n },\n };\n\n case BATCH_RUN_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.scheduledTasks.data.filter(\n (task) => !action.payload.pending_ids.includes(task.id)\n );\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.scheduledTasks.data.filter(\n (task) => !action.payload.archived_ids.includes(task.id)\n );\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_DELETE_SCHEDULED_TASKS_SUCCESS: {\n const newData = state.scheduledTasks.data.filter(\n (task) => !action.payload.deleted_ids.includes(task.id)\n );\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_RUN_SCHEDULED_TASKS_ERROR:\n case BATCH_ARCHIVE_SCHEDULED_TASKS_ERROR:\n case BATCH_DELETE_SCHEDULED_TASKS_ERROR:\n return {\n ...state,\n scheduledTasks: {\n ...state.scheduledTasks,\n batchActionPending: false,\n data: state.scheduledTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: false,\n };\n }),\n },\n };\n\n case RUN_AGGREGATING_TASK_BEGIN:\n case ARCHIVE_AGGREGATING_TASK_BEGIN:\n case DELETE_AGGREGATING_TASK_BEGIN:\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n data: state.aggregatingTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: true };\n }),\n },\n };\n\n case RUN_AGGREGATING_TASK_ERROR:\n case ARCHIVE_AGGREGATING_TASK_ERROR:\n case DELETE_AGGREGATING_TASK_ERROR:\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n data: state.aggregatingTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false };\n }),\n },\n };\n\n case RUN_AGGREGATING_TASK_SUCCESS:\n case ARCHIVE_AGGREGATING_TASK_SUCCESS:\n case DELETE_AGGREGATING_TASK_SUCCESS:\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n data: state.aggregatingTasks.data.filter(\n (task) => task.id !== action.taskId\n ),\n },\n };\n\n case BATCH_RUN_AGGREGATING_TASKS_BEGIN:\n case BATCH_ARCHIVE_AGGREGATING_TASKS_BEGIN:\n case BATCH_DELETE_AGGREGATING_TASKS_BEGIN:\n if (action.group !== state.aggregatingTasks.group) {\n return state;\n }\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n batchActionPending: true,\n data: state.aggregatingTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: true,\n };\n }),\n },\n };\n\n case BATCH_RUN_AGGREGATING_TASKS_ERROR:\n case BATCH_ARCHIVE_AGGREGATING_TASKS_ERROR:\n case BATCH_DELETE_AGGREGATING_TASKS_ERROR:\n if (action.group !== state.aggregatingTasks.group) {\n return state;\n }\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n batchActionPending: false,\n data: state.scheduledTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: false,\n };\n }),\n },\n };\n\n case BATCH_DELETE_AGGREGATING_TASKS_SUCCESS: {\n if (action.group !== state.aggregatingTasks.group) {\n return state;\n }\n const newData = state.aggregatingTasks.data.filter(\n (task) => !action.payload.deleted_ids.includes(task.id)\n );\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_RUN_AGGREGATING_TASKS_SUCCESS: {\n if (action.group !== state.aggregatingTasks.group) {\n return state;\n }\n const newData = state.aggregatingTasks.data.filter(\n (task) => !action.payload.pending_ids.includes(task.id)\n );\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS: {\n if (action.group !== state.aggregatingTasks.group) {\n return state;\n }\n const newData = state.aggregatingTasks.data.filter(\n (task) => !action.payload.archived_ids.includes(task.id)\n );\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case RUN_RETRY_TASK_BEGIN:\n case ARCHIVE_RETRY_TASK_BEGIN:\n case DELETE_RETRY_TASK_BEGIN:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n data: state.retryTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: true };\n }),\n },\n };\n\n case RUN_RETRY_TASK_SUCCESS:\n case ARCHIVE_RETRY_TASK_SUCCESS:\n case DELETE_RETRY_TASK_SUCCESS:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n data: state.retryTasks.data.filter(\n (task) => task.id !== action.taskId\n ),\n },\n };\n\n case RUN_RETRY_TASK_ERROR:\n case ARCHIVE_RETRY_TASK_ERROR:\n case DELETE_RETRY_TASK_ERROR:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n data: state.retryTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false };\n }),\n },\n };\n\n case RUN_ALL_RETRY_TASKS_BEGIN:\n case ARCHIVE_ALL_RETRY_TASKS_BEGIN:\n case DELETE_ALL_RETRY_TASKS_BEGIN:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n allActionPending: true,\n },\n };\n\n case RUN_ALL_RETRY_TASKS_SUCCESS:\n case ARCHIVE_ALL_RETRY_TASKS_SUCCESS:\n case DELETE_ALL_RETRY_TASKS_SUCCESS:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n allActionPending: false,\n data: [],\n },\n };\n\n case RUN_ALL_RETRY_TASKS_ERROR:\n case ARCHIVE_ALL_RETRY_TASKS_ERROR:\n case DELETE_ALL_RETRY_TASKS_ERROR:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n allActionPending: false,\n },\n };\n\n case BATCH_RUN_RETRY_TASKS_BEGIN:\n case BATCH_ARCHIVE_RETRY_TASKS_BEGIN:\n case BATCH_DELETE_RETRY_TASKS_BEGIN:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n batchActionPending: true,\n data: state.retryTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: true,\n };\n }),\n },\n };\n\n case BATCH_RUN_RETRY_TASKS_SUCCESS: {\n const newData = state.retryTasks.data.filter(\n (task) => !action.payload.pending_ids.includes(task.id)\n );\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_ARCHIVE_RETRY_TASKS_SUCCESS: {\n const newData = state.retryTasks.data.filter(\n (task) => !action.payload.archived_ids.includes(task.id)\n );\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_DELETE_RETRY_TASKS_SUCCESS: {\n const newData = state.retryTasks.data.filter(\n (task) => !action.payload.deleted_ids.includes(task.id)\n );\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_RUN_RETRY_TASKS_ERROR:\n case BATCH_ARCHIVE_RETRY_TASKS_ERROR:\n case BATCH_DELETE_RETRY_TASKS_ERROR:\n return {\n ...state,\n retryTasks: {\n ...state.retryTasks,\n batchActionPending: false,\n data: state.retryTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: false,\n };\n }),\n },\n };\n\n case RUN_ARCHIVED_TASK_BEGIN:\n case DELETE_ARCHIVED_TASK_BEGIN:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n data: state.archivedTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: true };\n }),\n },\n };\n\n case RUN_ARCHIVED_TASK_SUCCESS:\n case DELETE_ARCHIVED_TASK_SUCCESS:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n data: state.archivedTasks.data.filter(\n (task) => task.id !== action.taskId\n ),\n },\n };\n\n case RUN_ARCHIVED_TASK_ERROR:\n case DELETE_ARCHIVED_TASK_ERROR:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n data: state.archivedTasks.data.map((task) => {\n if (task.id !== action.taskId) {\n return task;\n }\n return { ...task, requestPending: false };\n }),\n },\n };\n\n case RUN_ALL_ARCHIVED_TASKS_BEGIN:\n case DELETE_ALL_ARCHIVED_TASKS_BEGIN:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n allActionPending: true,\n },\n };\n\n case RUN_ALL_ARCHIVED_TASKS_SUCCESS:\n case DELETE_ALL_ARCHIVED_TASKS_SUCCESS:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n allActionPending: false,\n data: [],\n },\n };\n\n case RUN_ALL_ARCHIVED_TASKS_ERROR:\n case DELETE_ALL_ARCHIVED_TASKS_ERROR:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n allActionPending: false,\n },\n };\n\n case BATCH_RUN_ARCHIVED_TASKS_BEGIN:\n case BATCH_DELETE_ARCHIVED_TASKS_BEGIN:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n batchActionPending: true,\n data: state.archivedTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: true,\n };\n }),\n },\n };\n\n case BATCH_RUN_ARCHIVED_TASKS_SUCCESS: {\n const newData = state.archivedTasks.data.filter(\n (task) => !action.payload.pending_ids.includes(task.id)\n );\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_DELETE_ARCHIVED_TASKS_SUCCESS: {\n const newData = state.archivedTasks.data.filter(\n (task) => !action.payload.deleted_ids.includes(task.id)\n );\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n batchActionPending: false,\n data: newData,\n },\n };\n }\n\n case BATCH_RUN_ARCHIVED_TASKS_ERROR:\n case BATCH_DELETE_ARCHIVED_TASKS_ERROR:\n return {\n ...state,\n archivedTasks: {\n ...state.archivedTasks,\n batchActionPending: false,\n data: state.archivedTasks.data.map((task) => {\n if (!action.taskIds.includes(task.id)) {\n return task;\n }\n return {\n ...task,\n requestPending: false,\n };\n }),\n },\n };\n\n case RUN_ALL_AGGREGATING_TASKS_BEGIN:\n case ARCHIVE_ALL_AGGREGATING_TASKS_BEGIN:\n case DELETE_ALL_AGGREGATING_TASKS_BEGIN:\n if (state.aggregatingTasks.group !== action.group) {\n return state;\n }\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n allActionPending: true,\n },\n };\n\n case RUN_ALL_AGGREGATING_TASKS_SUCCESS:\n case ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS:\n case DELETE_ALL_AGGREGATING_TASKS_SUCCESS:\n if (state.aggregatingTasks.group !== action.group) {\n return state;\n }\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n allActionPending: false,\n data: [],\n },\n };\n\n case RUN_ALL_AGGREGATING_TASKS_ERROR:\n case ARCHIVE_ALL_AGGREGATING_TASKS_ERROR:\n case DELETE_ALL_AGGREGATING_TASKS_ERROR:\n if (state.aggregatingTasks.group !== action.group) {\n return state;\n }\n return {\n ...state,\n aggregatingTasks: {\n ...state.aggregatingTasks,\n allActionPending: false,\n error: action.error,\n },\n };\n\n default:\n return state;\n }\n}\n\nexport default tasksReducer;\n","import {\n GroupsActionTypes,\n LIST_GROUPS_BEGIN,\n LIST_GROUPS_ERROR,\n LIST_GROUPS_SUCCESS,\n} from \"../actions/groupsActions\";\nimport {\n LIST_AGGREGATING_TASKS_SUCCESS,\n TasksActionTypes,\n} from \"../actions/tasksActions\";\nimport { GroupInfo } from \"../api\";\n\ninterface GroupsState {\n loading: boolean;\n data: GroupInfo[];\n error: string;\n}\n\nconst initialState: GroupsState = {\n data: [],\n loading: false,\n error: \"\",\n};\n\nfunction groupsReducer(\n state = initialState,\n action: GroupsActionTypes | TasksActionTypes\n): GroupsState {\n switch (action.type) {\n case LIST_GROUPS_BEGIN:\n return { ...state, loading: true };\n\n case LIST_GROUPS_ERROR:\n return { ...state, loading: false, error: action.error };\n\n case LIST_GROUPS_SUCCESS:\n return {\n ...state,\n loading: false,\n error: \"\",\n data: action.payload.groups,\n };\n\n case LIST_AGGREGATING_TASKS_SUCCESS:\n return {\n ...state,\n data: action.payload.groups,\n };\n\n default:\n return state;\n }\n}\n\nexport default groupsReducer;\n","import {\n LIST_SERVERS_BEGIN,\n LIST_SERVERS_ERROR,\n LIST_SERVERS_SUCCESS,\n ServersActionTypes,\n} from \"../actions/serversActions\";\nimport { ServerInfo } from \"../api\";\n\ninterface ServersState {\n loading: boolean;\n error: string;\n data: ServerInfo[];\n}\n\nconst initialState: ServersState = {\n loading: false,\n error: \"\",\n data: [],\n};\n\nexport default function serversReducer(\n state = initialState,\n action: ServersActionTypes\n): ServersState {\n switch (action.type) {\n case LIST_SERVERS_BEGIN:\n return {\n ...state,\n loading: true,\n };\n\n case LIST_SERVERS_SUCCESS:\n return {\n loading: false,\n error: \"\",\n data: action.payload.servers,\n };\n\n case LIST_SERVERS_ERROR:\n return {\n ...state,\n error: action.error,\n loading: false,\n };\n\n default:\n return state;\n }\n}\n","import {\n CLOSE_SNACKBAR,\n SnackbarActionTypes,\n} from \"../actions/snackbarActions\";\nimport {\n BATCH_CANCEL_ACTIVE_TASKS_SUCCESS,\n BATCH_DELETE_ARCHIVED_TASKS_SUCCESS,\n BATCH_DELETE_RETRY_TASKS_SUCCESS,\n BATCH_DELETE_SCHEDULED_TASKS_SUCCESS,\n BATCH_ARCHIVE_RETRY_TASKS_SUCCESS,\n BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS,\n BATCH_RUN_ARCHIVED_TASKS_SUCCESS,\n BATCH_RUN_RETRY_TASKS_SUCCESS,\n BATCH_RUN_SCHEDULED_TASKS_SUCCESS,\n CANCEL_ALL_ACTIVE_TASKS_SUCCESS,\n DELETE_ALL_ARCHIVED_TASKS_SUCCESS,\n DELETE_ALL_RETRY_TASKS_SUCCESS,\n DELETE_ALL_SCHEDULED_TASKS_SUCCESS,\n DELETE_ARCHIVED_TASK_SUCCESS,\n DELETE_RETRY_TASK_SUCCESS,\n DELETE_SCHEDULED_TASK_SUCCESS,\n ARCHIVE_ALL_RETRY_TASKS_SUCCESS,\n ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS,\n ARCHIVE_RETRY_TASK_SUCCESS,\n ARCHIVE_SCHEDULED_TASK_SUCCESS,\n RUN_ALL_ARCHIVED_TASKS_SUCCESS,\n RUN_ALL_RETRY_TASKS_SUCCESS,\n RUN_ALL_SCHEDULED_TASKS_SUCCESS,\n RUN_ARCHIVED_TASK_SUCCESS,\n RUN_RETRY_TASK_SUCCESS,\n RUN_SCHEDULED_TASK_SUCCESS,\n TasksActionTypes,\n ARCHIVE_PENDING_TASK_SUCCESS,\n DELETE_PENDING_TASK_SUCCESS,\n BATCH_ARCHIVE_PENDING_TASKS_SUCCESS,\n BATCH_DELETE_PENDING_TASKS_SUCCESS,\n ARCHIVE_ALL_PENDING_TASKS_SUCCESS,\n DELETE_ALL_PENDING_TASKS_SUCCESS,\n DELETE_COMPLETED_TASK_SUCCESS,\n DELETE_ALL_COMPLETED_TASKS_SUCCESS,\n BATCH_DELETE_COMPLETED_TASKS_SUCCESS,\n RUN_AGGREGATING_TASK_SUCCESS,\n ARCHIVE_AGGREGATING_TASK_SUCCESS,\n DELETE_AGGREGATING_TASK_SUCCESS,\n BATCH_RUN_AGGREGATING_TASKS_SUCCESS,\n BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS,\n BATCH_DELETE_AGGREGATING_TASKS_SUCCESS,\n RUN_ALL_AGGREGATING_TASKS_SUCCESS,\n ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS,\n DELETE_ALL_AGGREGATING_TASKS_SUCCESS,\n} from \"../actions/tasksActions\";\n\ninterface SnackbarState {\n isOpen: boolean;\n message: string;\n}\n\nconst initialState: SnackbarState = {\n isOpen: false,\n message: \"\",\n};\n\nfunction snackbarReducer(\n state = initialState,\n action: TasksActionTypes | SnackbarActionTypes\n): SnackbarState {\n switch (action.type) {\n case CLOSE_SNACKBAR:\n return {\n // Note: We keep the message state unchanged for\n // smoother transition animation.\n ...state,\n isOpen: false,\n };\n\n case BATCH_CANCEL_ACTIVE_TASKS_SUCCESS: {\n const n = action.payload.canceled_ids.length;\n return {\n isOpen: true,\n message: `Cancelation signal sent to ${n} ${\n n === 1 ? \"task\" : \"tasks\"\n }`,\n };\n }\n\n case CANCEL_ALL_ACTIVE_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: `Cancelation signal sent to all tasks in ${action.queue} queue`,\n };\n\n case RUN_SCHEDULED_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Scheduled task is now pending`,\n };\n\n case RUN_RETRY_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Retry task is now pending`,\n };\n\n case RUN_ARCHIVED_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Archived task is now pending`,\n };\n\n case RUN_AGGREGATING_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Aggregating task is now pending`,\n };\n\n case ARCHIVE_PENDING_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Pending task is now archived`,\n };\n\n case ARCHIVE_SCHEDULED_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Scheduled task is now archived`,\n };\n\n case ARCHIVE_RETRY_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Retry task is now archived`,\n };\n\n case ARCHIVE_AGGREGATING_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Aggregating task is now archived`,\n };\n\n case DELETE_PENDING_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Pending task deleted`,\n };\n\n case DELETE_SCHEDULED_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Scheduled task deleted`,\n };\n\n case DELETE_AGGREGATING_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Aggregating task deleted`,\n };\n\n case BATCH_RUN_SCHEDULED_TASKS_SUCCESS: {\n const n = action.payload.pending_ids.length;\n return {\n isOpen: true,\n message: `${n} scheduled ${\n n === 1 ? \"task is\" : \"tasks are\"\n } now pending`,\n };\n }\n\n case BATCH_RUN_AGGREGATING_TASKS_SUCCESS: {\n const n = action.payload.pending_ids.length;\n return {\n isOpen: true,\n message: `${n} aggregating ${\n n === 1 ? \"task is\" : \"tasks are\"\n } now pending`,\n };\n }\n\n case BATCH_ARCHIVE_AGGREGATING_TASKS_SUCCESS: {\n const n = action.payload.archived_ids.length;\n return {\n isOpen: true,\n message: `${n} aggregating ${\n n === 1 ? \"task is\" : \"tasks are\"\n } now archived`,\n };\n }\n\n case BATCH_DELETE_AGGREGATING_TASKS_SUCCESS: {\n const n = action.payload.deleted_ids.length;\n return {\n isOpen: true,\n message: `${n} aggregating ${n === 1 ? \"task\" : \"tasks\"} deleted`,\n };\n }\n\n case BATCH_ARCHIVE_PENDING_TASKS_SUCCESS: {\n const n = action.payload.archived_ids.length;\n return {\n isOpen: true,\n message: `${n} pending ${\n n === 1 ? \"task is\" : \"tasks are\"\n } now archived`,\n };\n }\n\n case BATCH_DELETE_PENDING_TASKS_SUCCESS: {\n const n = action.payload.deleted_ids.length;\n return {\n isOpen: true,\n message: `${n} pending ${n === 1 ? \"task\" : \"tasks\"} deleted`,\n };\n }\n\n case BATCH_ARCHIVE_SCHEDULED_TASKS_SUCCESS: {\n const n = action.payload.archived_ids.length;\n return {\n isOpen: true,\n message: `${n} scheduled ${\n n === 1 ? \"task is\" : \"tasks are\"\n } now archived`,\n };\n }\n\n case BATCH_DELETE_SCHEDULED_TASKS_SUCCESS: {\n const n = action.payload.deleted_ids.length;\n return {\n isOpen: true,\n message: `${n} scheduled ${n === 1 ? \"task\" : \"tasks\"} deleted`,\n };\n }\n\n case ARCHIVE_ALL_PENDING_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All pending tasks are now archived\",\n };\n\n case DELETE_ALL_PENDING_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All pending tasks deleted\",\n };\n\n case RUN_ALL_AGGREGATING_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: `All tasks in group ${action.group} are now pending`,\n };\n\n case ARCHIVE_ALL_AGGREGATING_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: `All tasks in group ${action.group} are now archived`,\n };\n\n case DELETE_ALL_AGGREGATING_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: `All tasks in group ${action.group} deleted`,\n };\n\n case RUN_ALL_SCHEDULED_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All scheduled tasks are now pending\",\n };\n\n case ARCHIVE_ALL_SCHEDULED_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All scheduled tasks are now archived\",\n };\n\n case DELETE_ALL_SCHEDULED_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All scheduled tasks deleted\",\n };\n\n case DELETE_RETRY_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Retry task deleted`,\n };\n\n case BATCH_RUN_RETRY_TASKS_SUCCESS: {\n const n = action.payload.pending_ids.length;\n return {\n isOpen: true,\n message: `${n} retry ${n === 1 ? \"task is\" : \"tasks are\"} now pending`,\n };\n }\n\n case BATCH_ARCHIVE_RETRY_TASKS_SUCCESS: {\n const n = action.payload.archived_ids.length;\n return {\n isOpen: true,\n message: `${n} retry ${n === 1 ? \"task is\" : \"tasks are\"} now archived`,\n };\n }\n\n case BATCH_DELETE_RETRY_TASKS_SUCCESS: {\n const n = action.payload.deleted_ids.length;\n return {\n isOpen: true,\n message: `${n} retry ${n === 1 ? \"task\" : \"tasks\"} deleted`,\n };\n }\n\n case RUN_ALL_RETRY_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All retry tasks are now pending\",\n };\n\n case ARCHIVE_ALL_RETRY_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All retry tasks are now archived\",\n };\n\n case DELETE_ALL_RETRY_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All retry tasks deleted\",\n };\n\n case DELETE_ARCHIVED_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Archived task deleted`,\n };\n\n case BATCH_RUN_ARCHIVED_TASKS_SUCCESS: {\n const n = action.payload.pending_ids.length;\n return {\n isOpen: true,\n message: `${n} archived ${\n n === 1 ? \"task is\" : \"tasks are\"\n } now pending`,\n };\n }\n\n case BATCH_DELETE_ARCHIVED_TASKS_SUCCESS: {\n const n = action.payload.deleted_ids.length;\n return {\n isOpen: true,\n message: `${n} archived ${n === 1 ? \"task\" : \"tasks\"} deleted`,\n };\n }\n\n case RUN_ALL_ARCHIVED_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All archived tasks are now pending\",\n };\n\n case DELETE_ALL_ARCHIVED_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All archived tasks deleted\",\n };\n\n case DELETE_COMPLETED_TASK_SUCCESS:\n return {\n isOpen: true,\n message: `Completed task deleted`,\n };\n\n case DELETE_ALL_COMPLETED_TASKS_SUCCESS:\n return {\n isOpen: true,\n message: \"All completed tasks deleted\",\n };\n\n case BATCH_DELETE_COMPLETED_TASKS_SUCCESS:\n const n = action.payload.deleted_ids.length;\n return {\n isOpen: true,\n message: `${n} completed ${n === 1 ? \"task\" : \"tasks\"} deleted`,\n };\n\n default:\n return state;\n }\n}\n\nexport default snackbarReducer;\n","import {\n LIST_QUEUES_SUCCESS,\n QueuesActionTypes,\n} from \"../actions/queuesActions\";\nimport {\n LIST_QUEUE_STATS_BEGIN,\n LIST_QUEUE_STATS_ERROR,\n LIST_QUEUE_STATS_SUCCESS,\n QueueStatsActionTypes,\n} from \"../actions/queueStatsActions\";\nimport { DailyStat } from \"../api\";\n\ninterface QueueStatsState {\n loading: boolean;\n data: { [qname: string]: DailyStat[] };\n}\n\nconst initialState: QueueStatsState = {\n loading: false,\n data: {},\n};\n\nexport default function queueStatsReducer(\n state = initialState,\n action: QueueStatsActionTypes | QueuesActionTypes\n): QueueStatsState {\n switch (action.type) {\n case LIST_QUEUE_STATS_BEGIN:\n return {\n ...state,\n loading: true,\n };\n\n case LIST_QUEUE_STATS_SUCCESS:\n return {\n data: action.payload.stats,\n loading: false,\n };\n\n case LIST_QUEUE_STATS_ERROR:\n return {\n ...state,\n loading: false,\n };\n\n case LIST_QUEUES_SUCCESS: {\n // Copy to avoid mutation.\n let newData = { ...state.data };\n // Update today's stats with most up-to-date data.\n for (const q of action.payload.queues) {\n const stats = newData[q.queue];\n if (!stats) {\n continue;\n }\n const newStats = stats.map((stat) => {\n if (isSameDate(stat.date, q.timestamp)) {\n return {\n ...stat,\n processed: q.processed,\n failed: q.failed,\n };\n }\n return stat;\n });\n newData[q.queue] = newStats;\n }\n return { ...state, data: newData };\n }\n\n default:\n return state;\n }\n}\n\n// Returns true if two timestamps are from the same date.\nfunction isSameDate(ts1: string, ts2: string): boolean {\n const date1 = new Date(ts1);\n const date2 = new Date(ts2);\n return (\n date1.getUTCDate() === date2.getUTCDate() &&\n date1.getUTCMonth() === date2.getUTCMonth() &&\n date1.getUTCFullYear() === date2.getUTCFullYear()\n );\n}\n","import {\n GET_REDIS_INFO_BEGIN,\n GET_REDIS_INFO_ERROR,\n GET_REDIS_INFO_SUCCESS,\n RedisInfoActionTypes,\n} from \"../actions/redisInfoActions\";\nimport { QueueLocation, RedisInfo } from \"../api\";\n\ninterface RedisInfoState {\n loading: boolean;\n error: string;\n address: string;\n data: RedisInfo | null;\n rawData: string | null;\n cluster: boolean;\n rawClusterNodes: string | null;\n queueLocations: QueueLocation[] | null;\n}\n\nconst initialState: RedisInfoState = {\n loading: false,\n error: \"\",\n address: \"\",\n data: null,\n rawData: null,\n cluster: false,\n rawClusterNodes: null,\n queueLocations: null,\n};\n\nexport default function redisInfoReducer(\n state = initialState,\n action: RedisInfoActionTypes\n): RedisInfoState {\n switch (action.type) {\n case GET_REDIS_INFO_BEGIN:\n return {\n ...state,\n loading: true,\n };\n\n case GET_REDIS_INFO_ERROR:\n return {\n ...state,\n loading: false,\n error: action.error,\n };\n\n case GET_REDIS_INFO_SUCCESS:\n return {\n loading: false,\n error: \"\",\n address: action.payload.address,\n data: action.payload.info,\n rawData: action.payload.raw_info,\n cluster: action.payload.cluster,\n rawClusterNodes: action.payload.raw_cluster_nodes,\n queueLocations: action.payload.queue_locations,\n };\n\n default:\n return state;\n }\n}\n","import {\n GET_METRICS_BEGIN,\n GET_METRICS_ERROR,\n GET_METRICS_SUCCESS,\n MetricsActionTypes,\n} from \"../actions/metricsActions\";\nimport { MetricsResponse } from \"../api\";\n\ninterface MetricsState {\n loading: boolean;\n error: string;\n data: MetricsResponse | null;\n}\n\nconst initialState: MetricsState = {\n loading: false,\n error: \"\",\n data: null,\n};\n\nexport default function metricsReducer(\n state = initialState,\n action: MetricsActionTypes\n): MetricsState {\n switch (action.type) {\n case GET_METRICS_BEGIN:\n return {\n ...state,\n loading: true,\n };\n\n case GET_METRICS_ERROR:\n return {\n ...state,\n loading: false,\n error: action.error,\n };\n\n case GET_METRICS_SUCCESS:\n return {\n loading: false,\n error: \"\",\n data: action.payload,\n };\n\n default:\n return state;\n }\n}\n","import { initialState as settingsInitialState } from \"./reducers/settingsReducer\"\nimport { AppState } from \"./store\";\n\nconst LOCAL_STORAGE_KEY = \"asynqmon:state\";\n\nexport function loadState(): Partial {\n try {\n const serializedState = localStorage.getItem(LOCAL_STORAGE_KEY);\n if (serializedState === null) {\n return {};\n }\n const savedState = JSON.parse(serializedState);\n return {\n settings: {\n ...settingsInitialState,\n ...(savedState.settings || {}),\n }\n }\n } catch (err) {\n console.log(\"loadState: could not load state \", err)\n return {};\n }\n}\n\nexport function saveState(state: AppState) {\n try {\n const serializedState = JSON.stringify({ settings: state.settings });\n localStorage.setItem(LOCAL_STORAGE_KEY, serializedState);\n } catch (err) {\n console.error(\"saveState: could not save state: \", err);\n }\n}\n","import { combineReducers, configureStore } from \"@reduxjs/toolkit\";\nimport settingsReducer from \"./reducers/settingsReducer\";\nimport queuesReducer from \"./reducers/queuesReducer\";\nimport tasksReducer from \"./reducers/tasksReducer\";\nimport groupsReducer from \"./reducers/groupsReducer\";\nimport serversReducer from \"./reducers/serversReducer\";\nimport schedulerEntriesReducer from \"./reducers/schedulerEntriesReducer\";\nimport snackbarReducer from \"./reducers/snackbarReducer\";\nimport queueStatsReducer from \"./reducers/queueStatsReducer\";\nimport redisInfoReducer from \"./reducers/redisInfoReducer\";\nimport metricsReducer from \"./reducers/metricsReducer\";\nimport { loadState } from \"./localStorage\";\n\nconst rootReducer = combineReducers({\n settings: settingsReducer,\n queues: queuesReducer,\n tasks: tasksReducer,\n groups: groupsReducer,\n servers: serversReducer,\n schedulerEntries: schedulerEntriesReducer,\n snackbar: snackbarReducer,\n queueStats: queueStatsReducer,\n redis: redisInfoReducer,\n metrics: metricsReducer,\n});\n\nconst preloadedState = loadState();\n\n// AppState is the top-level application state maintained by redux store.\nexport type AppState = ReturnType;\n\nconst store = configureStore({\n reducer: rootReducer,\n preloadedState,\n});\n\nexport default store;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","// Prefix used for go template\nconst goTmplActionPrefix = \"/[[\";\n\n// paseses flags (string values) assigned under the window objects by server.\nexport default function parseFlagsUnderWindow() {\n // ROOT_PATH\n if (window.FLAG_ROOT_PATH === undefined) {\n console.log(\"ROOT_PATH is not defined. Falling back to emtpy string\");\n window.ROOT_PATH = \"\";\n } else {\n window.ROOT_PATH = window.FLAG_ROOT_PATH;\n }\n\n // PROMETHEUS_SERVER_ADDRESS\n if (window.FLAG_PROMETHEUS_SERVER_ADDRESS === undefined) {\n console.log(\n \"PROMETHEUS_SERVER_ADDRESS is not defined. Falling back to emtpy string\"\n );\n window.PROMETHEUS_SERVER_ADDRESS = \"\";\n } else if (\n window.FLAG_PROMETHEUS_SERVER_ADDRESS.startsWith(goTmplActionPrefix)\n ) {\n console.log(\n \"PROMETHEUS_SERVER_ADDRESS was not evaluated by the server. Falling back to empty string\"\n );\n window.PROMETHEUS_SERVER_ADDRESS = \"\";\n } else {\n window.PROMETHEUS_SERVER_ADDRESS = window.FLAG_PROMETHEUS_SERVER_ADDRESS;\n }\n\n // READ_ONLY\n if (window.FLAG_READ_ONLY === undefined) {\n console.log(\"READ_ONLY is not defined. Falling back to false\");\n window.READ_ONLY = false;\n } else if (window.FLAG_READ_ONLY.startsWith(goTmplActionPrefix)) {\n console.log(\n \"READ_ONLY was not evaluated by the server. Falling back to false\"\n );\n window.READ_ONLY = false;\n } else {\n window.READ_ONLY = window.FLAG_READ_ONLY === \"true\";\n }\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { Provider } from \"react-redux\";\nimport App from \"./App\";\nimport store from \"./store\";\nimport parseFlagsUnderWindow from \"./parseFlags\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport { saveState } from \"./localStorage\";\nimport { SettingsState } from \"./reducers/settingsReducer\";\n\nparseFlagsUnderWindow();\n\nlet currentSettings: SettingsState | undefined = undefined;\nstore.subscribe(() => {\n const prevSettings = currentSettings;\n currentSettings = store.getState().settings;\n\n // Write to local-storage only when settings have changed.\n if (prevSettings !== currentSettings) {\n saveState(store.getState());\n }\n});\n\nReactDOM.render(\n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\n// TODO(hibiken): Look into this.\nserviceWorker.unregister();\n"],"sourceRoot":""}