mirror of
https://github.com/grafana/grafana.git
synced 2024-11-26 02:40:26 -06:00
frontend refactors
This commit is contained in:
parent
1fb97cf417
commit
b25e735c02
@ -34,7 +34,7 @@ func ProvideResourceServer(db db.DB, cfg *setting.Cfg, features featuremgmt.Feat
|
||||
// Create a local blob filesystem blob store
|
||||
if supportBlobs {
|
||||
dir := filepath.Join(cfg.DataPath, "unistore", "blobs")
|
||||
if err := os.MkdirAll(dir, 0o755); err != nil {
|
||||
if err := os.MkdirAll(dir, 0o750); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ func ProvideResourceServer(db db.DB, cfg *setting.Cfg, features featuremgmt.Feat
|
||||
opts.Lifecycle = bridge
|
||||
} else {
|
||||
dir := filepath.Join(cfg.DataPath, "unistore", "resource")
|
||||
if err := os.MkdirAll(dir, 0o755); err != nil {
|
||||
if err := os.MkdirAll(dir, 0o750); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@ github.com/fullstorydev/grpchan v1.1.1 h1:heQqIJlAv5Cnks9a70GRL2EJke6QQoUB25VGR6
|
||||
github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
|
||||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
|
@ -25,7 +25,7 @@ import {
|
||||
transformSaveModelToScene,
|
||||
} from '../serialization/transformSaveModelToScene';
|
||||
import { DecoratedRevisionModel } from '../settings/VersionsEditView';
|
||||
import { historySrv } from '../settings/version-history/HistorySrv';
|
||||
import { getHistorySrv } from '../settings/version-history/HistorySrv';
|
||||
import { dashboardSceneGraph } from '../utils/dashboardSceneGraph';
|
||||
import { djb2Hash } from '../utils/djb2Hash';
|
||||
import { findVizPanelByKey } from '../utils/utils';
|
||||
@ -1137,7 +1137,7 @@ describe('DashboardScene', () => {
|
||||
version: 4,
|
||||
});
|
||||
|
||||
jest.mocked(historySrv.restoreDashboard).mockResolvedValue({ version: newVersion });
|
||||
jest.mocked(getHistorySrv().restoreDashboard).mockResolvedValue({ version: newVersion });
|
||||
jest.mocked(transformSaveModelToScene).mockReturnValue(mockScene);
|
||||
|
||||
return scene.onRestore(getVersionMock()).then((res) => {
|
||||
@ -1150,7 +1150,7 @@ describe('DashboardScene', () => {
|
||||
|
||||
it('should return early if historySrv does not return a valid version number', () => {
|
||||
jest
|
||||
.mocked(historySrv.restoreDashboard)
|
||||
.mocked(getHistorySrv().restoreDashboard)
|
||||
.mockResolvedValueOnce({ version: null })
|
||||
.mockResolvedValueOnce({ version: undefined })
|
||||
.mockResolvedValueOnce({ version: Infinity })
|
||||
|
@ -49,7 +49,7 @@ import {
|
||||
import { gridItemToPanel } from '../serialization/transformSceneToSaveModel';
|
||||
import { DecoratedRevisionModel } from '../settings/VersionsEditView';
|
||||
import { DashboardEditView } from '../settings/utils';
|
||||
import { historySrv } from '../settings/version-history';
|
||||
import { getHistorySrv } from '../settings/version-history';
|
||||
import { DashboardModelCompatibilityWrapper } from '../utils/DashboardModelCompatibilityWrapper';
|
||||
import { dashboardSceneGraph, getLibraryVizPanelFromVizPanel } from '../utils/dashboardSceneGraph';
|
||||
import { djb2Hash } from '../utils/djb2Hash';
|
||||
@ -355,19 +355,20 @@ export class DashboardScene extends SceneObjectBase<DashboardSceneState> {
|
||||
}
|
||||
|
||||
public onRestore = async (version: DecoratedRevisionModel): Promise<boolean> => {
|
||||
const versionRsp = await historySrv.restoreDashboard(version.uid, version.version);
|
||||
|
||||
if (!Number.isInteger(versionRsp.version)) {
|
||||
const versionRsp = await getHistorySrv().restoreDashboard(version.uid, version.version);
|
||||
|
||||
const rev = (versionRsp as SaveDashboardResponseDTO).version;
|
||||
if (!Number.isInteger(version)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const dashboardDTO: DashboardDTO = {
|
||||
dashboard: new DashboardModel(version.data),
|
||||
dashboard: new DashboardModel(version.data!),
|
||||
meta: this.state.meta,
|
||||
};
|
||||
const dashScene = transformSaveModelToScene(dashboardDTO);
|
||||
const newState = sceneUtils.cloneSceneObjectState(dashScene.state);
|
||||
newState.version = versionRsp.version;
|
||||
newState.version = rev;
|
||||
|
||||
this.setState(newState);
|
||||
this.exitEditMode({ skipConfirm: true, restoreInitialState: false });
|
||||
|
@ -4,7 +4,7 @@ import { DashboardScene } from '../scene/DashboardScene';
|
||||
import { activateFullSceneTree } from '../utils/test-utils';
|
||||
|
||||
import { VERSIONS_FETCH_LIMIT, VersionsEditView } from './VersionsEditView';
|
||||
import { historySrv } from './version-history';
|
||||
import { getHistorySrv } from './version-history';
|
||||
|
||||
jest.mock('./version-history/HistorySrv');
|
||||
|
||||
@ -20,7 +20,7 @@ describe('VersionsEditView', () => {
|
||||
} as unknown as React.FormEvent<HTMLInputElement>;
|
||||
|
||||
beforeEach(async () => {
|
||||
jest.mocked(historySrv.getHistoryList).mockResolvedValue(getVersions());
|
||||
jest.mocked(getHistorySrv().getHistoryList).mockResolvedValue(getVersions());
|
||||
|
||||
const result = await buildTestScene();
|
||||
dashboard = result.dashboard;
|
||||
@ -81,7 +81,7 @@ describe('VersionsEditView', () => {
|
||||
versionsView.onCheck(mockEvent, 4);
|
||||
|
||||
jest
|
||||
.mocked(historySrv.getDashboardVersion)
|
||||
.mocked(getHistorySrv().getDashboardVersion)
|
||||
.mockResolvedValueOnce({ data: 'lhs' })
|
||||
.mockResolvedValue({ data: 'rhs' });
|
||||
|
||||
@ -100,7 +100,7 @@ describe('VersionsEditView', () => {
|
||||
versionsView.onCheck(mockEvent, 2);
|
||||
|
||||
jest
|
||||
.mocked(historySrv.getDashboardVersion)
|
||||
.mocked(getHistorySrv().getDashboardVersion)
|
||||
.mockResolvedValueOnce({ data: 'lhs' })
|
||||
.mockResolvedValue({ data: 'rhs' });
|
||||
|
||||
|
@ -16,16 +16,10 @@ import {
|
||||
VersionHistoryTable,
|
||||
VersionsHistoryButtons,
|
||||
} from './version-history';
|
||||
import { VersionModel, getHistorySrv } from './version-history/HistorySrv';
|
||||
import { DecoratedRevisionModel, VersionModel, getHistorySrv } from './version-history/HistorySrv';
|
||||
|
||||
export const VERSIONS_FETCH_LIMIT = 10;
|
||||
|
||||
export type DecoratedRevisionModel = VersionModel & {
|
||||
checked: boolean;
|
||||
createdDateString: string;
|
||||
ageString: string;
|
||||
};
|
||||
|
||||
export interface VersionsEditViewState extends DashboardEditViewState {
|
||||
versions?: DecoratedRevisionModel[];
|
||||
isLoading?: boolean;
|
||||
|
@ -7,19 +7,28 @@ export interface HistoryListOpts {
|
||||
start: number;
|
||||
}
|
||||
|
||||
// The raw version from
|
||||
// The raw version returned from api
|
||||
export interface VersionModel {
|
||||
uid: string;
|
||||
version: number | string; // resourceVersion in k8s
|
||||
version: number; // resourceVersion in k8s must be numeric
|
||||
created: string;
|
||||
createdBy: string;
|
||||
message: string;
|
||||
}
|
||||
|
||||
// The version used in UI components
|
||||
export type DecoratedRevisionModel = VersionModel & {
|
||||
checked: boolean;
|
||||
createdDateString: string;
|
||||
ageString: string;
|
||||
data?: Dashboard
|
||||
};
|
||||
|
||||
|
||||
export interface HistorySrv {
|
||||
getHistoryList(dashboardUID: string, options: HistoryListOpts): Promise<VersionModel[]>;
|
||||
getDashboardVersion(dashboardUID: string, version: number | string): Promise<Dashboard | {}>; // Just the spec (for now)
|
||||
restoreDashboard(dashboardUID: string, version: number | string): Promise<SaveDashboardResponseDTO | {}>;
|
||||
restoreDashboard(dashboardUID: string, version: number | string): Promise<SaveDashboardResponseDTO>;
|
||||
}
|
||||
|
||||
class LegacyHistorySrv implements HistorySrv {
|
||||
@ -40,9 +49,9 @@ class LegacyHistorySrv implements HistorySrv {
|
||||
return info.data; // the dashboard body
|
||||
}
|
||||
|
||||
restoreDashboard(dashboardUID: string, version: number): Promise<SaveDashboardResponseDTO | {}> {
|
||||
restoreDashboard(dashboardUID: string, version: number): Promise<SaveDashboardResponseDTO> {
|
||||
if (typeof dashboardUID !== 'string') {
|
||||
return Promise.resolve({});
|
||||
return Promise.resolve({} as unknown as SaveDashboardResponseDTO);
|
||||
}
|
||||
|
||||
const url = `api/dashboards/uid/${dashboardUID}/restore`;
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { ConfirmModal } from '@grafana/ui';
|
||||
import { useAppNotification } from 'app/core/copy/appNotification';
|
||||
|
||||
import { DecoratedRevisionModel } from '../VersionsEditView';
|
||||
import { DecoratedRevisionModel } from './HistorySrv';
|
||||
|
||||
export interface RevertDashboardModalProps {
|
||||
hideModal: () => void;
|
||||
|
@ -1,4 +1,4 @@
|
||||
export { HistorySrv, historySrv, RevisionsModel } from './HistorySrv';
|
||||
export { HistorySrv, getHistorySrv } from './HistorySrv';
|
||||
export { VersionHistoryTable } from './VersionHistoryTable';
|
||||
export { VersionHistoryHeader } from './VersionHistoryHeader';
|
||||
export { VersionsHistoryButtons } from './VersionHistoryButtons';
|
||||
|
@ -4,11 +4,10 @@ import * as React from 'react';
|
||||
import { Spinner, HorizontalGroup } from '@grafana/ui';
|
||||
import { Page } from 'app/core/components/Page/Page';
|
||||
import {
|
||||
RevisionsModel,
|
||||
VersionHistoryHeader,
|
||||
VersionsHistoryButtons,
|
||||
} from 'app/features/dashboard-scene/settings/version-history';
|
||||
import { getHistorySrv } from 'app/features/dashboard-scene/settings/version-history/HistorySrv';
|
||||
import { DecoratedRevisionModel, VersionModel, getHistorySrv } from 'app/features/dashboard-scene/settings/version-history/HistorySrv';
|
||||
|
||||
import { VersionHistoryComparison } from '../VersionHistory/VersionHistoryComparison';
|
||||
import { VersionHistoryTable } from '../VersionHistory/VersionHistoryTable';
|
||||
@ -28,11 +27,6 @@ type State = {
|
||||
isNewLatest: boolean;
|
||||
};
|
||||
|
||||
export type DecoratedRevisionModel = RevisionsModel & {
|
||||
createdDateString: string;
|
||||
ageString: string;
|
||||
};
|
||||
|
||||
export const VERSIONS_FETCH_LIMIT = 10;
|
||||
|
||||
export class VersionsSettings extends PureComponent<Props, State> {
|
||||
@ -100,7 +94,7 @@ export class VersionsSettings extends PureComponent<Props, State> {
|
||||
});
|
||||
};
|
||||
|
||||
decorateVersions = (versions: RevisionsModel[]) =>
|
||||
decorateVersions = (versions: VersionModel[]) =>
|
||||
versions.map((version) => ({
|
||||
...version,
|
||||
createdDateString: this.props.dashboard.formatDate(version.created),
|
||||
@ -115,7 +109,7 @@ export class VersionsSettings extends PureComponent<Props, State> {
|
||||
onCheck = (ev: React.FormEvent<HTMLInputElement>, versionId: number) => {
|
||||
this.setState({
|
||||
versions: this.state.versions.map((version) =>
|
||||
version.id === versionId ? { ...version, checked: ev.currentTarget.checked } : version
|
||||
version.version === versionId ? { ...version, checked: ev.currentTarget.checked } : version
|
||||
),
|
||||
});
|
||||
};
|
||||
|
@ -4,10 +4,9 @@ import { GrafanaTheme2 } from '@grafana/data';
|
||||
import { Button, ModalsController, CollapsableSection, useStyles2, Stack, Icon, Box } from '@grafana/ui';
|
||||
import { DiffGroup } from 'app/features/dashboard-scene/settings/version-history/DiffGroup';
|
||||
import { DiffViewer } from 'app/features/dashboard-scene/settings/version-history/DiffViewer';
|
||||
import { DecoratedRevisionModel } from 'app/features/dashboard-scene/settings/version-history/HistorySrv';
|
||||
import { jsonDiff } from 'app/features/dashboard-scene/settings/version-history/utils';
|
||||
|
||||
import { DecoratedRevisionModel } from '../DashboardSettings/VersionsSettings';
|
||||
|
||||
import { RevertDashboardModal } from './RevertDashboardModal';
|
||||
|
||||
type DiffViewProps = {
|
||||
|
@ -3,8 +3,7 @@ import * as React from 'react';
|
||||
|
||||
import { GrafanaTheme2 } from '@grafana/data';
|
||||
import { Checkbox, Button, Tag, ModalsController, useStyles2 } from '@grafana/ui';
|
||||
|
||||
import { DecoratedRevisionModel } from '../DashboardSettings/VersionsSettings';
|
||||
import { DecoratedRevisionModel } from 'app/features/dashboard-scene/settings/version-history/HistorySrv';
|
||||
|
||||
import { RevertDashboardModal } from './RevertDashboardModal';
|
||||
|
||||
@ -32,7 +31,7 @@ export const VersionHistoryTable = ({ versions, canCompare, onCheck }: VersionsT
|
||||
</thead>
|
||||
<tbody>
|
||||
{versions.map((version, idx) => (
|
||||
<tr key={version.id}>
|
||||
<tr key={version.version}>
|
||||
<td>
|
||||
<Checkbox
|
||||
aria-label={`Toggle selection of version ${version.version}`}
|
||||
@ -40,7 +39,7 @@ export const VersionHistoryTable = ({ versions, canCompare, onCheck }: VersionsT
|
||||
display: 'inline',
|
||||
})}
|
||||
checked={version.checked}
|
||||
onChange={(ev) => onCheck(ev, version.id)}
|
||||
onChange={(ev) => onCheck(ev, version.version)}
|
||||
disabled={!version.checked && canCompare}
|
||||
/>
|
||||
</td>
|
||||
|
Loading…
Reference in New Issue
Block a user