Merge pull request #1716 from automatisch/AUT-828

refactor: rewrite useVersion and healthcheck with RQ
This commit is contained in:
Ali BARIN
2024-03-13 11:02:38 +01:00
committed by GitHub
8 changed files with 31 additions and 56 deletions

View File

@@ -1,9 +0,0 @@
import appConfig from '../../config/app.js';
const healthcheck = () => {
return {
version: appConfig.version,
};
};
export default healthcheck;

View File

@@ -1,27 +0,0 @@
import { describe, it, expect } from 'vitest';
import request from 'supertest';
import app from '../../app';
import appConfig from '../../config/app';
describe('graphQL healthcheck query', () => {
it('should return application version', async () => {
const query = `
query {
healthcheck {
version
}
}
`;
const response = await request(app)
.post('/graphql')
.send({ query })
.expect(200);
const expectedResponsePayload = {
data: { healthcheck: { version: appConfig.version } },
};
expect(response.body).toEqual(expectedResponsePayload);
});
});

View File

@@ -21,7 +21,6 @@ import getSubscriptionStatus from './queries/get-subscription-status.ee.js';
import getTrialStatus from './queries/get-trial-status.ee.js';
import getUser from './queries/get-user.js';
import getUsers from './queries/get-users.js';
import healthcheck from './queries/healthcheck.js';
import listSamlAuthProviders from './queries/list-saml-auth-providers.ee.js';
import testConnection from './queries/test-connection.js';
@@ -49,7 +48,6 @@ const queryResolvers = {
getTrialStatus,
getUser,
getUsers,
healthcheck,
listSamlAuthProviders,
testConnection,
};

View File

@@ -37,7 +37,6 @@ type Query {
getTrialStatus: GetTrialStatus
getUser(id: String!): User
getUsers(limit: Int!, offset: Int!): UserConnection
healthcheck: AppHealth
listSamlAuthProviders: [ListSamlAuthProvider]
}
@@ -602,10 +601,6 @@ type ExecutionStepConnection {
pageInfo: PageInfo
}
type AppHealth {
version: String
}
type License {
id: String
name: String

View File

@@ -44,7 +44,6 @@ export const authenticationRules = {
'*': isAuthenticatedRule,
getConfig: allow,
getNotifications: allow,
healthcheck: allow,
listSamlAuthProviders: allow,
},
Mutation: {

View File

@@ -9,12 +9,14 @@ import SwapCallsIcon from '@mui/icons-material/SwapCalls';
import HistoryIcon from '@mui/icons-material/History';
import NotificationsIcon from '@mui/icons-material/Notifications';
import ArrowBackIosNew from '@mui/icons-material/ArrowBackIosNew';
import * as URLS from 'config/urls';
import useFormatMessage from 'hooks/useFormatMessage';
import useVersion from 'hooks/useVersion';
import AppBar from 'components/AppBar';
import Drawer from 'components/Drawer';
import useConfig from 'hooks/useConfig';
const drawerLinks = [
{
Icon: SwapCallsIcon,
@@ -35,6 +37,7 @@ const drawerLinks = [
dataTest: 'executions-page-drawer-link',
},
];
const generateDrawerBottomLinks = async ({
disableNotificationsPage,
notificationBadgeContent = 0,
@@ -48,23 +51,30 @@ const generateDrawerBottomLinks = async ({
to: URLS.UPDATES,
badgeContent: notificationBadgeContent,
};
const hasAdditionalDrawerLink =
additionalDrawerLink && additionalDrawerLinkText;
const additionalDrawerLinkObject = {
Icon: ArrowBackIosNew,
primary: additionalDrawerLinkText || '',
to: additionalDrawerLink || '',
target: '_blank',
};
const links = [];
if (!disableNotificationsPage) {
links.push(notificationsPageLinkObject);
}
if (hasAdditionalDrawerLink) {
links.push(additionalDrawerLinkObject);
}
return links;
};
export default function PublicLayout({ children }) {
const version = useVersion();
const { config, loading } = useConfig([
@@ -79,6 +89,7 @@ export default function PublicLayout({ children }) {
const [isDrawerOpen, setDrawerOpen] = React.useState(!matchSmallScreens);
const openDrawer = () => setDrawerOpen(true);
const closeDrawer = () => setDrawerOpen(false);
React.useEffect(() => {
async function perform() {
const newBottomLinks = await generateDrawerBottomLinks({
@@ -90,9 +101,12 @@ export default function PublicLayout({ children }) {
});
setBottomLinks(newBottomLinks);
}
if (loading) return;
perform();
}, [config, loading, version.newVersionCount]);
return (
<>
<AppBar

View File

@@ -1,8 +0,0 @@
import { gql } from '@apollo/client';
export const HEALTHCHECK = gql`
query Healthcheck {
healthcheck {
version
}
}
`;

View File

@@ -1,11 +1,23 @@
import { useQuery } from '@apollo/client';
import { compare } from 'compare-versions';
import { HEALTHCHECK } from 'graphql/queries/healthcheck';
import { useQuery } from '@tanstack/react-query';
import useNotifications from 'hooks/useNotifications';
import api from 'helpers/api';
export default function useVersion() {
const { notifications } = useNotifications();
const { data } = useQuery(HEALTHCHECK, { fetchPolicy: 'cache-and-network' });
const version = data?.healthcheck.version;
const { data } = useQuery({
queryKey: ['automatischVersion'],
queryFn: async ({ signal }) => {
const { data } = await api.get('/v1/automatisch/version', {
signal,
});
return data;
},
});
const version = data?.data?.version;
const newVersionCount = notifications.reduce((count, notification) => {
if (!version) return 0;
// an unexpectedly invalid version would throw and thus, try-catch.
@@ -16,6 +28,7 @@ export default function useVersion() {
return count;
}
}, 0);
return {
version,
newVersionCount,