locust-ui 1.0.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +169 -0
  3. package/lib/assets/favicon.png +0 -0
  4. package/lib/types/App.d.ts +2 -0
  5. package/lib/types/HtmlReport.d.ts +1 -0
  6. package/lib/types/assets/Logo.d.ts +4 -0
  7. package/lib/types/components/DataTable/DataTable.d.ts +13 -0
  8. package/lib/types/components/ExceptionsTable/ExceptionsTable.d.ts +10 -0
  9. package/lib/types/components/FailuresTable/FailuresTable.d.ts +10 -0
  10. package/lib/types/components/FallbackRender/FallbackRender.d.ts +6 -0
  11. package/lib/types/components/Form/Form.d.ts +9 -0
  12. package/lib/types/components/Form/Select.d.ts +13 -0
  13. package/lib/types/components/Layout/Footer/About.d.ts +2 -0
  14. package/lib/types/components/Layout/Footer/Footer.d.ts +2 -0
  15. package/lib/types/components/Layout/Layout.d.ts +7 -0
  16. package/lib/types/components/Layout/Navbar/DarkLightToggle.d.ts +2 -0
  17. package/lib/types/components/Layout/Navbar/Navbar.d.ts +2 -0
  18. package/lib/types/components/Layout/Navbar/SwarmMonitor.d.ts +11 -0
  19. package/lib/types/components/LineChart/LineChart.constants.d.ts +14 -0
  20. package/lib/types/components/LineChart/LineChart.d.ts +7 -0
  21. package/lib/types/components/LineChart/LineChart.types.d.ts +37 -0
  22. package/lib/types/components/LineChart/LineChart.utils.d.ts +69 -0
  23. package/lib/types/components/LogViewer/LogDisplay.d.ts +4 -0
  24. package/lib/types/components/LogViewer/LogViewer.d.ts +2 -0
  25. package/lib/types/components/LogViewer/LogViewer.utils.d.ts +1 -0
  26. package/lib/types/components/LogViewer/WorkerLogs.d.ts +5 -0
  27. package/lib/types/components/LogViewer/useLogViewer.d.ts +4 -0
  28. package/lib/types/components/Modal/Modal.d.ts +8 -0
  29. package/lib/types/components/Reports/Reports.d.ts +8 -0
  30. package/lib/types/components/ResponseTimeTable/ResponseTimeTable.d.ts +7 -0
  31. package/lib/types/components/StateButtons/EditButton.d.ts +2 -0
  32. package/lib/types/components/StateButtons/NewTestButton.d.ts +2 -0
  33. package/lib/types/components/StateButtons/ResetButton.d.ts +2 -0
  34. package/lib/types/components/StateButtons/StateButtons.d.ts +2 -0
  35. package/lib/types/components/StateButtons/StopButton.d.ts +2 -0
  36. package/lib/types/components/StatsTable/StatsTable.d.ts +23 -0
  37. package/lib/types/components/SwarmCharts/SwarmCharts.d.ts +10 -0
  38. package/lib/types/components/SwarmForm/SwarmCustomParameters.d.ts +7 -0
  39. package/lib/types/components/SwarmForm/SwarmEditForm.d.ts +14 -0
  40. package/lib/types/components/SwarmForm/SwarmForm.d.ts +13 -0
  41. package/lib/types/components/SwarmForm/SwarmUserClassPicker.d.ts +18 -0
  42. package/lib/types/components/SwarmRatios/SwarmRatios.d.ts +10 -0
  43. package/lib/types/components/Table/Table.d.ts +23 -0
  44. package/lib/types/components/Tabs/Tabs.constants.d.ts +72 -0
  45. package/lib/types/components/Tabs/Tabs.d.ts +23 -0
  46. package/lib/types/components/ViewColumnSelector/ViewColumnSelector.d.ts +10 -0
  47. package/lib/types/components/WorkersTable/WorkersTable.d.ts +10 -0
  48. package/lib/types/constants/auth.d.ts +3 -0
  49. package/lib/types/constants/logs.d.ts +1 -0
  50. package/lib/types/constants/swarm.d.ts +14 -0
  51. package/lib/types/constants/theme.d.ts +6 -0
  52. package/lib/types/hooks/useCreateTheme.d.ts +1 -0
  53. package/lib/types/hooks/useFetchExceptions.d.ts +1 -0
  54. package/lib/types/hooks/useFetchStats.d.ts +1 -0
  55. package/lib/types/hooks/useFetchTasks.d.ts +1 -0
  56. package/lib/types/hooks/useInterval.d.ts +4 -0
  57. package/lib/types/hooks/useNotifications.d.ts +4 -0
  58. package/lib/types/hooks/useSelectViewColumns.d.ts +8 -0
  59. package/lib/types/hooks/useSortByField.d.ts +9 -0
  60. package/lib/types/index.d.ts +1 -0
  61. package/lib/types/lib.d.ts +51 -0
  62. package/lib/types/pages/Auth.d.ts +3 -0
  63. package/lib/types/pages/Dashboard.d.ts +18 -0
  64. package/lib/types/pages/HtmlReport.d.ts +3 -0
  65. package/lib/types/redux/api/swarm.d.ts +11 -0
  66. package/lib/types/redux/hooks.d.ts +7 -0
  67. package/lib/types/redux/slice/logViewer.slice.d.ts +17 -0
  68. package/lib/types/redux/slice/notification.slice.d.ts +14 -0
  69. package/lib/types/redux/slice/root.slice.d.ts +87 -0
  70. package/lib/types/redux/slice/swarm.slice.d.ts +52 -0
  71. package/lib/types/redux/slice/theme.slice.d.ts +18 -0
  72. package/lib/types/redux/slice/ui.slice.d.ts +90 -0
  73. package/lib/types/redux/slice/url.slice.d.ts +20 -0
  74. package/lib/types/redux/store.d.ts +75 -0
  75. package/lib/types/redux/utils.d.ts +3 -0
  76. package/lib/types/styles/theme.d.ts +4 -0
  77. package/lib/types/types/auth.types.d.ts +10 -0
  78. package/lib/types/types/swarm.types.d.ts +46 -0
  79. package/lib/types/types/tab.types.d.ts +9 -0
  80. package/lib/types/types/table.types.d.ts +6 -0
  81. package/lib/types/types/ui.types.d.ts +96 -0
  82. package/lib/types/utils/array.d.ts +1 -0
  83. package/lib/types/utils/date.d.ts +1 -0
  84. package/lib/types/utils/number.d.ts +2 -0
  85. package/lib/types/utils/object.d.ts +6 -0
  86. package/lib/types/utils/string.d.ts +8 -0
  87. package/lib/types/utils/url.d.ts +6 -0
  88. package/lib/webui.js +60304 -0
  89. package/package.json +85 -0
@@ -0,0 +1,23 @@
1
+ import { ISortByFieldOptions } from '../../hooks/useSortByField';
2
+ import { ITableStructure } from '../../types/table.types';
3
+
4
+ interface ITable<Row> extends ISortByFieldOptions<Row> {
5
+ rows: Row[];
6
+ structure: ITableStructure[];
7
+ children?: React.ReactElement;
8
+ onTableHeadClick?: (event: React.MouseEvent<HTMLElement>) => void;
9
+ currentSortField?: string;
10
+ }
11
+ export interface ITableRowProps {
12
+ className?: string;
13
+ text?: string;
14
+ structureKey?: string;
15
+ }
16
+ export interface ITableRowContent {
17
+ content: string | number;
18
+ formatter?: (content: string | number) => string;
19
+ round?: number;
20
+ markdown?: boolean;
21
+ }
22
+ export default function Table<Row extends Record<string, any> = Record<string, string | number>>({ rows, structure, hasTotalRow, defaultSortKey, }: ITable<Row>): import("react").JSX.Element;
23
+ export {};
@@ -0,0 +1,72 @@
1
+ import { default as LogViewer } from '../LogViewer/LogViewer';
2
+ import { IRootState } from '../../redux/store';
3
+ import { ITab } from '../../types/tab.types';
4
+
5
+ export declare const tabConfig: {
6
+ stats: {
7
+ component: import('../../react-redux').ConnectedComponent<typeof import('../StatsTable/StatsTable').StatsTable, {
8
+ tableStructure?: import('../../../../types/table.types').ITableStructure[] | undefined;
9
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
10
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
11
+ }>;
12
+ key: string;
13
+ title: string;
14
+ };
15
+ charts: {
16
+ component: import('../../react-redux').ConnectedComponent<typeof import('../SwarmCharts/SwarmCharts').SwarmCharts, {
17
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
18
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
19
+ }>;
20
+ key: string;
21
+ title: string;
22
+ };
23
+ failures: {
24
+ component: import('../../react-redux').ConnectedComponent<typeof import('../FailuresTable/FailuresTable').FailuresTable, {
25
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
26
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
27
+ }>;
28
+ key: string;
29
+ title: string;
30
+ };
31
+ exceptions: {
32
+ component: import('../../react-redux').ConnectedComponent<typeof import('../ExceptionsTable/ExceptionsTable').ExceptionsTable, {
33
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
34
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
35
+ }>;
36
+ key: string;
37
+ title: string;
38
+ };
39
+ ratios: {
40
+ component: import('../../react-redux').ConnectedComponent<typeof import('../SwarmRatios/SwarmRatios').SwarmRatios, {
41
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
42
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
43
+ }>;
44
+ key: string;
45
+ title: string;
46
+ };
47
+ reports: {
48
+ component: import('../../react-redux').ConnectedComponent<({ extendedCsvFiles, statsHistoryEnabled, }: Pick<import('../../../../redux/slice/swarm.slice').ISwarmState, "extendedCsvFiles" | "statsHistoryEnabled">) => import("react").JSX.Element, {
49
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
50
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
51
+ }>;
52
+ key: string;
53
+ title: string;
54
+ };
55
+ logs: {
56
+ component: typeof LogViewer;
57
+ key: string;
58
+ title: string;
59
+ };
60
+ workers: {
61
+ component: import('../../react-redux').ConnectedComponent<({ workers }: {
62
+ workers?: import('../../../../types/ui.types').ISwarmWorker[] | undefined;
63
+ }) => import("react").JSX.Element, {
64
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
65
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
66
+ }>;
67
+ key: string;
68
+ title: string;
69
+ shouldDisplayTab: (state: IRootState) => boolean;
70
+ };
71
+ };
72
+ export declare const baseTabs: ITab[];
@@ -0,0 +1,23 @@
1
+ import { INotificationState } from '../../redux/slice/notification.slice';
2
+ import { IUrlState } from '../../redux/slice/url.slice';
3
+ import { ITab } from '../../types/tab.types';
4
+
5
+ interface IStateProps {
6
+ extendedTabs?: ITab[];
7
+ tabs?: ITab[];
8
+ }
9
+ interface ITabs extends IStateProps {
10
+ currentTabIndexFromQuery: number;
11
+ notification: INotificationState;
12
+ setNotification: (payload: INotificationState) => void;
13
+ setUrl: (payload: IUrlState) => void;
14
+ tabs: ITab[];
15
+ }
16
+ declare function Tabs({ currentTabIndexFromQuery, notification, setNotification, setUrl, tabs }: ITabs): import("react").JSX.Element;
17
+ declare const _default: import('../../react-redux').ConnectedComponent<typeof Tabs, {
18
+ extendedTabs?: ITab<string>[] | undefined;
19
+ tabs?: ITab<string>[] | undefined;
20
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
21
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
22
+ }>;
23
+ export default _default;
@@ -0,0 +1,10 @@
1
+ import { ITableStructure } from '../../types/table.types';
2
+
3
+ interface IViewColumnSelector {
4
+ structure: ITableStructure[];
5
+ selectedColumns: string[];
6
+ addColumn: (column: string) => void;
7
+ removeColumn: (column: string) => void;
8
+ }
9
+ declare function ViewColumnSelector({ structure, selectedColumns, addColumn, removeColumn, }: IViewColumnSelector): import("react").JSX.Element;
10
+ export default ViewColumnSelector;
@@ -0,0 +1,10 @@
1
+ import { ISwarmWorker } from '../../types/ui.types';
2
+
3
+ declare function WorkersTable({ workers }: {
4
+ workers?: ISwarmWorker[];
5
+ }): import("react").JSX.Element;
6
+ declare const _default: import('../../react-redux').ConnectedComponent<typeof WorkersTable, {
7
+ context?: import('../../react').Context<import('../../react-redux').ReactReduxContextValue<any, import('../../redux').UnknownAction> | null> | undefined;
8
+ store?: import('../../redux').Store<any, import('../../redux').UnknownAction, unknown> | undefined;
9
+ }>;
10
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { IAuthArgs } from '../types/auth.types';
2
+
3
+ export declare const authArgs: IAuthArgs | false;
@@ -0,0 +1 @@
1
+ export declare const LOG_VIEWER_KEY = "logViewer";
@@ -0,0 +1,14 @@
1
+ import { ISwarmState } from '../redux/slice/swarm.slice';
2
+ import { IReport, IReportTemplateArgs } from '../types/swarm.types';
3
+
4
+ export declare const SWARM_STATE: {
5
+ READY: string;
6
+ RUNNING: string;
7
+ STOPPED: string;
8
+ SPAWNING: string;
9
+ CLEANUP: string;
10
+ STOPPING: string;
11
+ MISSING: string;
12
+ };
13
+ export declare const swarmTemplateArgs: ISwarmState | IReportTemplateArgs;
14
+ export declare const htmlReportProps: IReport | false;
@@ -0,0 +1,6 @@
1
+ import { PaletteMode } from '../@mui/material';
2
+
3
+ export declare const THEME_MODE: {
4
+ [key: string]: PaletteMode;
5
+ };
6
+ export declare const INITIAL_THEME: PaletteMode;
@@ -0,0 +1 @@
1
+ export default function useCreateTheme(): import('../@mui/material').Theme;
@@ -0,0 +1 @@
1
+ export default function useFetchExceptions(): void;
@@ -0,0 +1 @@
1
+ export default function useSwarmUi(): void;
@@ -0,0 +1 @@
1
+ export default function useFetchTasks(): void;
@@ -0,0 +1,4 @@
1
+ export default function useInterval(callback: () => void, delay: number, { shouldRunInterval, immediate }?: {
2
+ shouldRunInterval?: boolean;
3
+ immediate?: boolean;
4
+ }): void;
@@ -0,0 +1,4 @@
1
+ export default function useNotifications(data: any[], { key, shouldNotify }: {
2
+ key: string;
3
+ shouldNotify?: (key: string) => boolean;
4
+ }): void;
@@ -0,0 +1,8 @@
1
+ import { ITableStructure } from '../types/table.types';
2
+
3
+ export default function useSelectViewColumns(defaultStructure: ITableStructure[]): {
4
+ selectedColumns: string[];
5
+ addColumn: (column: string) => void;
6
+ removeColumn: (column: string) => void;
7
+ filteredStructure: ITableStructure[];
8
+ };
@@ -0,0 +1,9 @@
1
+ export interface ISortByFieldOptions<Row> {
2
+ hasTotalRow?: boolean;
3
+ defaultSortKey?: keyof Row;
4
+ }
5
+ export default function useSortByField<Row>(rows: Row[], { hasTotalRow, defaultSortKey }?: ISortByFieldOptions<Row>): {
6
+ onTableHeadClick: (event: React.MouseEvent<HTMLElement>) => void;
7
+ sortedRows: Row[];
8
+ currentSortField: keyof Row | undefined;
9
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ import { ITab } from './types/tab.types';
2
+
3
+ export { default as Table } from './components/Table/Table';
4
+ export { default as LineChart } from './components/LineChart/LineChart';
5
+ export { baseTabs } from './components/Tabs/Tabs.constants';
6
+ export { default as useInterval } from './hooks/useInterval';
7
+ export { roundToDecimalPlaces } from './utils/number';
8
+ export { SWARM_STATE } from './constants/swarm';
9
+ export { default as Select } from './components/Form/Select';
10
+ export { default as SwarmForm } from './components/SwarmForm/SwarmForm';
11
+ export { default as Tabs } from './components/Tabs/Tabs';
12
+ export { default as Layout } from './components/Layout/Layout';
13
+ export { default as useLogViewer } from './components/LogViewer/useLogViewer';
14
+ export { default as useFetchExceptions } from './hooks/useFetchStats';
15
+ export { default as useFetchTasks } from './hooks/useFetchStats';
16
+ export { default as Navbar } from './components/Layout/Navbar/Navbar';
17
+ export { default as useCreateTheme } from './hooks/useCreateTheme';
18
+ export { tabConfig } from './components/Tabs/Tabs.constants';
19
+ export { store } from './redux/store';
20
+ export type { IRootState } from './redux/store';
21
+ export type { ITab } from './types/tab.types';
22
+ export interface IExtendedTableStructure<StatKey> {
23
+ key: StatKey | 'name' | 'method';
24
+ title: string;
25
+ }
26
+ export interface IExtendedTable<ExtendedTabKey, StatKey> {
27
+ key: ExtendedTabKey;
28
+ structure: IExtendedTableStructure<StatKey>[];
29
+ }
30
+ export interface IExtendedReport {
31
+ href: string;
32
+ title: string;
33
+ }
34
+ export type IStatData<StatKey extends string> = {
35
+ [key in StatKey]: string;
36
+ } & {
37
+ name: string;
38
+ safeName: string;
39
+ };
40
+ export interface IExtendedStat<ExtendedTabKey, StatKey extends string> {
41
+ key: ExtendedTabKey;
42
+ data: IStatData<StatKey>[];
43
+ }
44
+ export interface ILocustUi<ExtendedTabKey, StatKeys extends string> {
45
+ extendedTabs?: ITab<ExtendedTabKey>[];
46
+ extendedTables?: IExtendedTable<ExtendedTabKey, StatKeys>[];
47
+ extendedReports?: IExtendedReport[];
48
+ extendedStats?: IExtendedStat<ExtendedTabKey, StatKeys>[];
49
+ tabs?: ITab[];
50
+ }
51
+ export default function LocustUi<ExtendedTabKey extends string = string, StatKey extends string = string>({ extendedTabs, extendedTables, extendedReports, extendedStats, tabs, }: ILocustUi<ExtendedTabKey, StatKey>): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { IAuthArgs } from '../types/auth.types';
2
+
3
+ export default function Auth({ authProviders, error, usernamePasswordCallback }: IAuthArgs): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { ITab } from '../types/tab.types';
2
+ import { SwarmState } from '../types/ui.types';
3
+
4
+ interface IDashboard {
5
+ isModalOpen?: boolean;
6
+ swarmState: SwarmState;
7
+ extendedTabs?: ITab[];
8
+ tabs?: ITab[];
9
+ }
10
+ declare function Dashboard({ swarmState, tabs, extendedTabs }: IDashboard): import("react").JSX.Element;
11
+ declare const _default: import('../react-redux').ConnectedComponent<typeof Dashboard, {
12
+ extendedTabs?: ITab<string>[] | undefined;
13
+ tabs?: ITab<string>[] | undefined;
14
+ isModalOpen?: boolean | undefined;
15
+ context?: import('../react').Context<import('../react-redux').ReactReduxContextValue<any, import('../redux').UnknownAction> | null> | undefined;
16
+ store?: import('../redux').Store<any, import('../redux').UnknownAction, unknown> | undefined;
17
+ }>;
18
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { IReport } from '../types/swarm.types';
2
+
3
+ export default function HtmlReport({ locustfile, showDownloadLink, startTime, endTime, charts, host, exceptionsStatistics, requestsStatistics, failuresStatistics, responseTimeStatistics, tasks, }: IReport): import("react").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { IStatsResponse, ISwarmExceptionsResponse, ISwarmRatios, ILogsResponse } from '../../types/ui.types';
2
+
3
+ export declare const api: import('../../@reduxjs/toolkit/query/react').Api<import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, {
4
+ getStats: import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, IStatsResponse, "api">;
5
+ getTasks: import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, ISwarmRatios, "api">;
6
+ getExceptions: import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, ISwarmExceptionsResponse, "api">;
7
+ getLogs: import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, ILogsResponse, "api">;
8
+ startSwarm: import('../../@reduxjs/toolkit/query/react').MutationDefinition<any, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, any, "api">;
9
+ updateUserSettings: import('../../@reduxjs/toolkit/query/react').MutationDefinition<any, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, any, "api">;
10
+ }, "api", never, typeof import('../../@reduxjs/toolkit/query/react').coreModuleName | typeof import('../../@reduxjs/toolkit/query/react').reactHooksModuleName>;
11
+ export declare const useGetStatsQuery: import('../../@reduxjs/toolkit/dist/query/react/buildHooks').UseQuery<import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, IStatsResponse, "api">>, useGetTasksQuery: import('../../@reduxjs/toolkit/dist/query/react/buildHooks').UseQuery<import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, ISwarmRatios, "api">>, useGetExceptionsQuery: import('../../@reduxjs/toolkit/dist/query/react/buildHooks').UseQuery<import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, ISwarmExceptionsResponse, "api">>, useGetLogsQuery: import('../../@reduxjs/toolkit/dist/query/react/buildHooks').UseQuery<import('../../@reduxjs/toolkit/query/react').QueryDefinition<void, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, ILogsResponse, "api">>, useStartSwarmMutation: import('../../@reduxjs/toolkit/dist/query/react/buildHooks').UseMutation<import('../../@reduxjs/toolkit/query/react').MutationDefinition<any, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, any, "api">>, useUpdateUserSettingsMutation: import('../../@reduxjs/toolkit/dist/query/react/buildHooks').UseMutation<import('../../@reduxjs/toolkit/query/react').MutationDefinition<any, import('../../@reduxjs/toolkit/query/react').BaseQueryFn<string | import('../../@reduxjs/toolkit/query/react').FetchArgs, unknown, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query/react').FetchBaseQueryMeta>, never, any, "api">>;
@@ -0,0 +1,7 @@
1
+ import { Dispatch, ActionCreator } from '../@reduxjs/toolkit';
2
+ import { TypedUseSelectorHook } from '../react-redux';
3
+ import { IRootState, Action } from './store';
4
+
5
+ export declare const useSelector: TypedUseSelectorHook<IRootState>;
6
+ export declare const useDispatch: () => Dispatch;
7
+ export declare function useAction<T extends ActionCreator<Action>>(action: T, dispatch?: any): (payload?: Parameters<T>[0]) => void;
@@ -0,0 +1,17 @@
1
+ import { PayloadAction } from '../../@reduxjs/toolkit';
2
+ import { ILogsResponse } from '../../types/ui.types';
3
+
4
+ export interface ILogViewerState extends ILogsResponse {
5
+ }
6
+ export type LogViewerAction = PayloadAction<ILogViewerState>;
7
+ export declare const logViewerActions: import('../../@reduxjs/toolkit').CaseReducerActions<{
8
+ setLogs: (state: ILogViewerState, { payload }: {
9
+ payload: ILogViewerState;
10
+ type: string;
11
+ }) => ILogViewerState & (boolean | ILogViewerState | import('../../notification.slice').INotificationState | Partial<import('../../swarm.slice').ISwarmState> | Partial<import('../../ui.slice').IUiState> | Partial<import('../../url.slice').IUrlState> | undefined);
12
+ }, "logViewer">;
13
+ declare const _default: import('..').Reducer<{
14
+ master: string[];
15
+ workers: {};
16
+ }>;
17
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import { PayloadAction } from '../../@reduxjs/toolkit';
2
+
3
+ export interface INotificationState {
4
+ [key: string]: boolean;
5
+ }
6
+ export type NotificationAction = PayloadAction<INotificationState>;
7
+ export declare const notificationActions: import('../../@reduxjs/toolkit').CaseReducerActions<{
8
+ setNotification: (state: INotificationState, { payload }: {
9
+ payload: INotificationState;
10
+ type: string;
11
+ }) => INotificationState & (boolean | import('../../logViewer.slice').ILogViewerState | INotificationState | Partial<import('../../swarm.slice').ISwarmState> | Partial<import('../../ui.slice').IUiState> | Partial<import('../../url.slice').IUrlState> | undefined);
12
+ }, "notification">;
13
+ declare const _default: import('..').Reducer<{}>;
14
+ export default _default;
@@ -0,0 +1,87 @@
1
+ import { PayloadAction } from '../../@reduxjs/toolkit';
2
+ import { ILogViewerState, LogViewerAction } from './logViewer.slice';
3
+ import { INotificationState, NotificationAction } from './notification.slice';
4
+ import { ISwarmState, SwarmAction } from './swarm.slice';
5
+ import { IThemeState, ThemeAction } from './theme.slice';
6
+ import { IUiState, UiAction } from './ui.slice';
7
+ import { IUrlState, UrlAction } from './url.slice';
8
+
9
+ export interface IRootState {
10
+ logViewer: ILogViewerState;
11
+ notification: INotificationState;
12
+ swarm: ISwarmState;
13
+ theme: IThemeState;
14
+ ui: IUiState;
15
+ url: IUrlState;
16
+ }
17
+ export type Action = LogViewerAction | NotificationAction | SwarmAction | ThemeAction | UiAction | UrlAction | PayloadAction<undefined>;
18
+ declare const rootReducer: import('..').Reducer<{
19
+ api: import('../../@reduxjs/toolkit/query').CombinedState<{
20
+ getStats: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').IStatsResponse, "api">;
21
+ getTasks: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').ISwarmRatios, "api">;
22
+ getExceptions: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').ISwarmExceptionsResponse, "api">;
23
+ getLogs: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').ILogsResponse, "api">;
24
+ startSwarm: import('../../@reduxjs/toolkit/query').MutationDefinition<any, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, any, "api">;
25
+ updateUserSettings: import('../../@reduxjs/toolkit/query').MutationDefinition<any, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, any, "api">;
26
+ }, never, "api">;
27
+ logViewer: {
28
+ master: string[];
29
+ workers: {};
30
+ };
31
+ notification: {};
32
+ swarm: ISwarmState;
33
+ theme: {
34
+ isDarkMode: boolean;
35
+ };
36
+ ui: {
37
+ totalRps: number;
38
+ failRatio: number;
39
+ startTime: string;
40
+ stats: import('../../../../types/ui.types').ISwarmStat[];
41
+ errors: import('../../../../types/ui.types').ISwarmError[];
42
+ exceptions: import('../../../../types/ui.types').ISwarmException[];
43
+ charts: import('../../../../types/ui.types').ICharts;
44
+ ratios: import('../../../../types/ui.types').ISwarmRatios;
45
+ userCount: number;
46
+ };
47
+ url: {
48
+ query: {
49
+ [key: string]: string;
50
+ } | null;
51
+ };
52
+ }, import('..').UnknownAction, Partial<{
53
+ api: import('../../@reduxjs/toolkit/query').CombinedState<{
54
+ getStats: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').IStatsResponse, "api">;
55
+ getTasks: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').ISwarmRatios, "api">;
56
+ getExceptions: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').ISwarmExceptionsResponse, "api">;
57
+ getLogs: import('../../@reduxjs/toolkit/query').QueryDefinition<void, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, import('../../../../types/ui.types').ILogsResponse, "api">;
58
+ startSwarm: import('../../@reduxjs/toolkit/query').MutationDefinition<any, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, any, "api">;
59
+ updateUserSettings: import('../../@reduxjs/toolkit/query').MutationDefinition<any, import('../../@reduxjs/toolkit/query').BaseQueryFn<string | import('../../@reduxjs/toolkit/query').FetchArgs, unknown, import('../../@reduxjs/toolkit/query').FetchBaseQueryError, {}, import('../../@reduxjs/toolkit/query').FetchBaseQueryMeta>, never, any, "api">;
60
+ }, never, "api"> | undefined;
61
+ logViewer: {
62
+ master: string[];
63
+ workers: {};
64
+ } | undefined;
65
+ notification: {} | undefined;
66
+ swarm: ISwarmState | undefined;
67
+ theme: {
68
+ isDarkMode: boolean;
69
+ } | undefined;
70
+ ui: {
71
+ totalRps: number;
72
+ failRatio: number;
73
+ startTime: string;
74
+ stats: import('../../../../types/ui.types').ISwarmStat[];
75
+ errors: import('../../../../types/ui.types').ISwarmError[];
76
+ exceptions: import('../../../../types/ui.types').ISwarmException[];
77
+ charts: import('../../../../types/ui.types').ICharts;
78
+ ratios: import('../../../../types/ui.types').ISwarmRatios;
79
+ userCount: number;
80
+ } | undefined;
81
+ url: {
82
+ query: {
83
+ [key: string]: string;
84
+ } | null;
85
+ } | undefined;
86
+ }>>;
87
+ export default rootReducer;
@@ -0,0 +1,52 @@
1
+ import { PayloadAction } from '../../@reduxjs/toolkit';
2
+ import { IExtraOptions, IHistory, ISwarmUser } from '../../types/swarm.types';
3
+ import { ITab } from '../../types/tab.types';
4
+ import { ITableStructure } from '../../types/table.types';
5
+
6
+ export interface ISwarmState {
7
+ availableShapeClasses: string[];
8
+ availableUserClasses: string[];
9
+ availableUserTasks: {
10
+ [key: string]: string[];
11
+ };
12
+ extraOptions: IExtraOptions;
13
+ extendedTabs?: ITab[];
14
+ extendedTables?: {
15
+ key: string;
16
+ structure: ITableStructure[];
17
+ }[];
18
+ extendedCsvFiles?: {
19
+ href: string;
20
+ title: string;
21
+ }[];
22
+ history: IHistory[];
23
+ host: string;
24
+ isDistributed: boolean;
25
+ isShape: boolean | null;
26
+ locustfile: string;
27
+ numUsers: number | null;
28
+ overrideHostWarning: boolean;
29
+ percentilesToChart: number[];
30
+ percentilesToStatistics: number[];
31
+ runTime?: string | number;
32
+ showUserclassPicker: boolean;
33
+ spawnRate: number | null;
34
+ state: string;
35
+ statsHistoryEnabled: boolean;
36
+ tasks: string;
37
+ userCount: number | string;
38
+ users: {
39
+ [key: string]: ISwarmUser;
40
+ };
41
+ version: string;
42
+ workerCount: number;
43
+ }
44
+ export type SwarmAction = PayloadAction<Partial<ISwarmState>>;
45
+ export declare const swarmActions: import('../../@reduxjs/toolkit').CaseReducerActions<{
46
+ setSwarm: (state: ISwarmState, { payload }: {
47
+ payload: Partial<ISwarmState>;
48
+ type: string;
49
+ }) => ISwarmState & (boolean | import('../../logViewer.slice').ILogViewerState | import('../../notification.slice').INotificationState | Partial<ISwarmState> | Partial<import('../../ui.slice').IUiState> | Partial<import('../../url.slice').IUrlState> | undefined);
50
+ }, "swarm">;
51
+ declare const _default: import('..').Reducer<ISwarmState>;
52
+ export default _default;
@@ -0,0 +1,18 @@
1
+ import { PayloadAction } from '../../@reduxjs/toolkit';
2
+
3
+ export interface IThemeState {
4
+ isDarkMode: boolean;
5
+ }
6
+ export type ThemeAction = PayloadAction<boolean>;
7
+ export declare const themeActions: import('../../@reduxjs/toolkit').CaseReducerActions<{
8
+ setIsDarkMode: (state: import('../../immer').WritableDraft<{
9
+ isDarkMode: boolean;
10
+ }>, { payload }: {
11
+ payload: any;
12
+ type: string;
13
+ }) => void;
14
+ }, "theme">;
15
+ declare const _default: import('..').Reducer<{
16
+ isDarkMode: boolean;
17
+ }>;
18
+ export default _default;
@@ -0,0 +1,90 @@
1
+ import { PayloadAction } from '../../@reduxjs/toolkit';
2
+ import { ICharts, ISwarmError, ISwarmStat, ISwarmRatios, ISwarmException, ISwarmWorker, IExtendedStat } from '../../types/ui.types';
3
+
4
+ export interface IUiState {
5
+ extendedStats?: IExtendedStat[];
6
+ totalRps: number;
7
+ failRatio: number;
8
+ startTime: string;
9
+ stats: ISwarmStat[];
10
+ errors: ISwarmError[];
11
+ workers?: ISwarmWorker[];
12
+ exceptions: ISwarmException[];
13
+ ratios: ISwarmRatios;
14
+ charts: ICharts;
15
+ userCount: number;
16
+ }
17
+ export type UiAction = PayloadAction<Partial<IUiState>>;
18
+ export declare const uiActions: import('../../@reduxjs/toolkit').CaseReducerActions<{
19
+ setUi: (state: IUiState, { payload }: {
20
+ payload: Partial<IUiState>;
21
+ type: string;
22
+ }) => IUiState & (boolean | import('../../logViewer.slice').ILogViewerState | import('../../notification.slice').INotificationState | Partial<import('../../swarm.slice').ISwarmState> | Partial<IUiState> | Partial<import('../../url.slice').IUrlState> | undefined);
23
+ updateCharts: (state: import('../../immer').WritableDraft<{
24
+ totalRps: number;
25
+ failRatio: number;
26
+ startTime: string;
27
+ stats: ISwarmStat[];
28
+ errors: ISwarmError[];
29
+ exceptions: ISwarmException[];
30
+ charts: ICharts;
31
+ ratios: ISwarmRatios;
32
+ userCount: number;
33
+ }>, { payload }: {
34
+ payload: any;
35
+ type: string;
36
+ }) => {
37
+ charts: ICharts;
38
+ totalRps: number;
39
+ failRatio: number;
40
+ startTime: string;
41
+ stats: import('../../immer').WritableDraft<ISwarmStat>[];
42
+ errors: import('../../immer').WritableDraft<ISwarmError>[];
43
+ exceptions: import('../../immer').WritableDraft<ISwarmException>[];
44
+ ratios: import('../../immer').WritableDraft<ISwarmRatios>;
45
+ userCount: number;
46
+ };
47
+ updateChartMarkers: (state: import('../../immer').WritableDraft<{
48
+ totalRps: number;
49
+ failRatio: number;
50
+ startTime: string;
51
+ stats: ISwarmStat[];
52
+ errors: ISwarmError[];
53
+ exceptions: ISwarmException[];
54
+ charts: ICharts;
55
+ ratios: ISwarmRatios;
56
+ userCount: number;
57
+ }>, { payload }: {
58
+ payload: any;
59
+ type: string;
60
+ }) => {
61
+ charts: {
62
+ markers: any[];
63
+ currentRps: ((string | number)[] | import('../../types/ui.types').NullChartValue)[];
64
+ currentFailPerSec: ([string, number] | import('../../types/ui.types').NullChartValue)[];
65
+ totalAvgResponseTime: ([string, number] | import('../../types/ui.types').NullChartValue)[];
66
+ userCount: ([string, number] | import('../../types/ui.types').NullChartValue)[];
67
+ time: string[];
68
+ };
69
+ totalRps: number;
70
+ failRatio: number;
71
+ startTime: string;
72
+ stats: import('../../immer').WritableDraft<ISwarmStat>[];
73
+ errors: import('../../immer').WritableDraft<ISwarmError>[];
74
+ exceptions: import('../../immer').WritableDraft<ISwarmException>[];
75
+ ratios: import('../../immer').WritableDraft<ISwarmRatios>;
76
+ userCount: number;
77
+ };
78
+ }, "ui">;
79
+ declare const _default: import('..').Reducer<{
80
+ totalRps: number;
81
+ failRatio: number;
82
+ startTime: string;
83
+ stats: ISwarmStat[];
84
+ errors: ISwarmError[];
85
+ exceptions: ISwarmException[];
86
+ charts: ICharts;
87
+ ratios: ISwarmRatios;
88
+ userCount: number;
89
+ }>;
90
+ export default _default;