mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-15 10:56:09 +08:00
commit
71f6b355c4
@ -146,7 +146,7 @@ services:
|
|||||||
condition: on-failure
|
condition: on-failure
|
||||||
|
|
||||||
query-service:
|
query-service:
|
||||||
image: signoz/query-service:0.37.1
|
image: signoz/query-service:0.37.2
|
||||||
command:
|
command:
|
||||||
[
|
[
|
||||||
"-config=/root/config/prometheus.yml",
|
"-config=/root/config/prometheus.yml",
|
||||||
@ -186,7 +186,7 @@ services:
|
|||||||
<<: *db-depend
|
<<: *db-depend
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
image: signoz/frontend:0.37.1
|
image: signoz/frontend:0.37.2
|
||||||
deploy:
|
deploy:
|
||||||
restart_policy:
|
restart_policy:
|
||||||
condition: on-failure
|
condition: on-failure
|
||||||
@ -199,7 +199,7 @@ services:
|
|||||||
- ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf
|
- ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
otel-collector:
|
otel-collector:
|
||||||
image: signoz/signoz-otel-collector:0.88.8
|
image: signoz/signoz-otel-collector:0.88.9
|
||||||
command:
|
command:
|
||||||
[
|
[
|
||||||
"--config=/etc/otel-collector-config.yaml",
|
"--config=/etc/otel-collector-config.yaml",
|
||||||
@ -237,7 +237,7 @@ services:
|
|||||||
- query-service
|
- query-service
|
||||||
|
|
||||||
otel-collector-migrator:
|
otel-collector-migrator:
|
||||||
image: signoz/signoz-schema-migrator:0.88.8
|
image: signoz/signoz-schema-migrator:0.88.9
|
||||||
deploy:
|
deploy:
|
||||||
restart_policy:
|
restart_policy:
|
||||||
condition: on-failure
|
condition: on-failure
|
||||||
|
@ -66,7 +66,7 @@ services:
|
|||||||
- --storage.path=/data
|
- --storage.path=/data
|
||||||
|
|
||||||
otel-collector-migrator:
|
otel-collector-migrator:
|
||||||
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.88.8}
|
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.88.9}
|
||||||
container_name: otel-migrator
|
container_name: otel-migrator
|
||||||
command:
|
command:
|
||||||
- "--dsn=tcp://clickhouse:9000"
|
- "--dsn=tcp://clickhouse:9000"
|
||||||
@ -81,7 +81,7 @@ services:
|
|||||||
# Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md`
|
# Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md`
|
||||||
otel-collector:
|
otel-collector:
|
||||||
container_name: signoz-otel-collector
|
container_name: signoz-otel-collector
|
||||||
image: signoz/signoz-otel-collector:0.88.8
|
image: signoz/signoz-otel-collector:0.88.9
|
||||||
command:
|
command:
|
||||||
[
|
[
|
||||||
"--config=/etc/otel-collector-config.yaml",
|
"--config=/etc/otel-collector-config.yaml",
|
||||||
|
@ -164,7 +164,7 @@ services:
|
|||||||
# Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md`
|
# Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md`
|
||||||
|
|
||||||
query-service:
|
query-service:
|
||||||
image: signoz/query-service:${DOCKER_TAG:-0.37.1}
|
image: signoz/query-service:${DOCKER_TAG:-0.37.2}
|
||||||
container_name: signoz-query-service
|
container_name: signoz-query-service
|
||||||
command:
|
command:
|
||||||
[
|
[
|
||||||
@ -203,7 +203,7 @@ services:
|
|||||||
<<: *db-depend
|
<<: *db-depend
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
image: signoz/frontend:${DOCKER_TAG:-0.37.1}
|
image: signoz/frontend:${DOCKER_TAG:-0.37.2}
|
||||||
container_name: signoz-frontend
|
container_name: signoz-frontend
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
depends_on:
|
depends_on:
|
||||||
@ -215,7 +215,7 @@ services:
|
|||||||
- ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf
|
- ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
otel-collector-migrator:
|
otel-collector-migrator:
|
||||||
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.88.8}
|
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.88.9}
|
||||||
container_name: otel-migrator
|
container_name: otel-migrator
|
||||||
command:
|
command:
|
||||||
- "--dsn=tcp://clickhouse:9000"
|
- "--dsn=tcp://clickhouse:9000"
|
||||||
@ -229,7 +229,7 @@ services:
|
|||||||
|
|
||||||
|
|
||||||
otel-collector:
|
otel-collector:
|
||||||
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.88.8}
|
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.88.9}
|
||||||
container_name: signoz-otel-collector
|
container_name: signoz-otel-collector
|
||||||
command:
|
command:
|
||||||
[
|
[
|
||||||
|
@ -28,7 +28,11 @@ import AppReducer, { User } from 'types/reducer/app';
|
|||||||
import { extractDomain, isCloudUser, isEECloudUser } from 'utils/app';
|
import { extractDomain, isCloudUser, isEECloudUser } from 'utils/app';
|
||||||
|
|
||||||
import PrivateRoute from './Private';
|
import PrivateRoute from './Private';
|
||||||
import defaultRoutes, { AppRoutes, SUPPORT_ROUTE } from './routes';
|
import defaultRoutes, {
|
||||||
|
AppRoutes,
|
||||||
|
LIST_LICENSES,
|
||||||
|
SUPPORT_ROUTE,
|
||||||
|
} from './routes';
|
||||||
|
|
||||||
function App(): JSX.Element {
|
function App(): JSX.Element {
|
||||||
const themeConfig = useThemeConfig();
|
const themeConfig = useThemeConfig();
|
||||||
@ -150,6 +154,10 @@ function App(): JSX.Element {
|
|||||||
if (isCloudUserVal || isEECloudUser()) {
|
if (isCloudUserVal || isEECloudUser()) {
|
||||||
const newRoutes = [...routes, SUPPORT_ROUTE];
|
const newRoutes = [...routes, SUPPORT_ROUTE];
|
||||||
|
|
||||||
|
setRoutes(newRoutes);
|
||||||
|
} else {
|
||||||
|
const newRoutes = [...routes, LIST_LICENSES];
|
||||||
|
|
||||||
setRoutes(newRoutes);
|
setRoutes(newRoutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,13 +191,6 @@ const routes: AppRoutes[] = [
|
|||||||
component: AllErrors,
|
component: AllErrors,
|
||||||
key: 'ALL_ERROR',
|
key: 'ALL_ERROR',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: ROUTES.LIST_LICENSES,
|
|
||||||
exact: true,
|
|
||||||
component: LicensePage,
|
|
||||||
isPrivate: true,
|
|
||||||
key: 'LIST_LICENSES',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: ROUTES.ERROR_DETAIL,
|
path: ROUTES.ERROR_DETAIL,
|
||||||
exact: true,
|
exact: true,
|
||||||
@ -320,6 +313,14 @@ export const SUPPORT_ROUTE: AppRoutes = {
|
|||||||
isPrivate: true,
|
isPrivate: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const LIST_LICENSES: AppRoutes = {
|
||||||
|
path: ROUTES.LIST_LICENSES,
|
||||||
|
exact: true,
|
||||||
|
component: LicensePage,
|
||||||
|
isPrivate: true,
|
||||||
|
key: 'LIST_LICENSES',
|
||||||
|
};
|
||||||
|
|
||||||
export interface AppRoutes {
|
export interface AppRoutes {
|
||||||
component: RouteProps['component'];
|
component: RouteProps['component'];
|
||||||
path: RouteProps['path'];
|
path: RouteProps['path'];
|
||||||
|
@ -37,6 +37,12 @@
|
|||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
padding-left: 0px !important;
|
padding-left: 0px !important;
|
||||||
|
|
||||||
|
&.custom-time {
|
||||||
|
input:not(:focus) {
|
||||||
|
min-width: 240px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
input::placeholder {
|
input::placeholder {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,10 @@ function CustomTimePicker({
|
|||||||
return (
|
return (
|
||||||
<div className="custom-time-picker">
|
<div className="custom-time-picker">
|
||||||
<Popover
|
<Popover
|
||||||
className="timeSelection-input-container"
|
className={cx(
|
||||||
|
'timeSelection-input-container',
|
||||||
|
selectedTime === 'custom' && inputValue === '' ? 'custom-time' : '',
|
||||||
|
)}
|
||||||
placement="bottomRight"
|
placement="bottomRight"
|
||||||
getPopupContainer={popupContainer}
|
getPopupContainer={popupContainer}
|
||||||
content={content}
|
content={content}
|
||||||
@ -193,12 +196,7 @@ function CustomTimePicker({
|
|||||||
<Input
|
<Input
|
||||||
className="timeSelection-input"
|
className="timeSelection-input"
|
||||||
type="text"
|
type="text"
|
||||||
style={{
|
|
||||||
minWidth: '120px',
|
|
||||||
width: '100%',
|
|
||||||
}}
|
|
||||||
status={inputValue && inputStatus === 'error' ? 'error' : ''}
|
status={inputValue && inputStatus === 'error' ? 'error' : ''}
|
||||||
allowClear={!isInputFocused && selectedTime === 'custom'}
|
|
||||||
placeholder={
|
placeholder={
|
||||||
isInputFocused
|
isInputFocused
|
||||||
? 'Time Format (1m or 2h or 3d or 4w)'
|
? 'Time Format (1m or 2h or 3d or 4w)'
|
||||||
|
@ -13,6 +13,8 @@ import { useActiveLog } from 'hooks/logs/useActiveLog';
|
|||||||
import { useCopyLogLink } from 'hooks/logs/useCopyLogLink';
|
import { useCopyLogLink } from 'hooks/logs/useCopyLogLink';
|
||||||
// hooks
|
// hooks
|
||||||
import { useIsDarkMode } from 'hooks/useDarkMode';
|
import { useIsDarkMode } from 'hooks/useDarkMode';
|
||||||
|
import { FlatLogData } from 'lib/logs/flatLogData';
|
||||||
|
import { isEmpty, isUndefined } from 'lodash-es';
|
||||||
import {
|
import {
|
||||||
KeyboardEvent,
|
KeyboardEvent,
|
||||||
MouseEvent,
|
MouseEvent,
|
||||||
@ -39,10 +41,13 @@ function RawLogView({
|
|||||||
data,
|
data,
|
||||||
linesPerRow,
|
linesPerRow,
|
||||||
isTextOverflowEllipsisDisabled,
|
isTextOverflowEllipsisDisabled,
|
||||||
|
selectedFields = [],
|
||||||
}: RawLogViewProps): JSX.Element {
|
}: RawLogViewProps): JSX.Element {
|
||||||
const { isHighlighted, isLogsExplorerPage, onLogCopy } = useCopyLogLink(
|
const { isHighlighted, isLogsExplorerPage, onLogCopy } = useCopyLogLink(
|
||||||
data.id,
|
data.id,
|
||||||
);
|
);
|
||||||
|
const flattenLogData = useMemo(() => FlatLogData(data), [data]);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
activeLog: activeContextLog,
|
activeLog: activeContextLog,
|
||||||
onSetActiveLog: handleSetActiveContextLog,
|
onSetActiveLog: handleSetActiveContextLog,
|
||||||
@ -62,12 +67,31 @@ function RawLogView({
|
|||||||
|
|
||||||
const severityText = data.severity_text ? `${data.severity_text} |` : '';
|
const severityText = data.severity_text ? `${data.severity_text} |` : '';
|
||||||
|
|
||||||
|
const updatedSelecedFields = useMemo(
|
||||||
|
() => selectedFields.filter((e) => e.name !== 'id'),
|
||||||
|
[selectedFields],
|
||||||
|
);
|
||||||
|
|
||||||
|
const attributesValues = updatedSelecedFields
|
||||||
|
.map((field) => flattenLogData[field.name])
|
||||||
|
.filter((attribute) => !isUndefined(attribute) && !isEmpty(attribute));
|
||||||
|
|
||||||
|
let attributesText = attributesValues.join(' | ');
|
||||||
|
|
||||||
|
if (attributesText.length > 0) {
|
||||||
|
attributesText += ' | ';
|
||||||
|
}
|
||||||
|
|
||||||
const text = useMemo(
|
const text = useMemo(
|
||||||
() =>
|
() =>
|
||||||
typeof data.timestamp === 'string'
|
typeof data.timestamp === 'string'
|
||||||
? `${dayjs(data.timestamp).format()} | ${severityText} ${data.body}`
|
? `${dayjs(data.timestamp).format()} | ${attributesText} ${severityText} ${
|
||||||
: `${dayjs(data.timestamp / 1e6).format()} | ${severityText} ${data.body}`,
|
data.body
|
||||||
[data.timestamp, data.body, severityText],
|
}`
|
||||||
|
: `${dayjs(
|
||||||
|
data.timestamp / 1e6,
|
||||||
|
).format()} | ${attributesText} ${severityText} ${data.body}`,
|
||||||
|
[data.timestamp, data.body, severityText, attributesText],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleClickExpand = useCallback(() => {
|
const handleClickExpand = useCallback(() => {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { IField } from 'types/api/logs/fields';
|
||||||
import { ILog } from 'types/api/logs/log';
|
import { ILog } from 'types/api/logs/log';
|
||||||
|
|
||||||
export interface RawLogViewProps {
|
export interface RawLogViewProps {
|
||||||
@ -6,6 +7,7 @@ export interface RawLogViewProps {
|
|||||||
isTextOverflowEllipsisDisabled?: boolean;
|
isTextOverflowEllipsisDisabled?: boolean;
|
||||||
data: ILog;
|
data: ILog;
|
||||||
linesPerRow: number;
|
linesPerRow: number;
|
||||||
|
selectedFields?: IField[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RawLogContentProps {
|
export interface RawLogContentProps {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.full-view-header-container {
|
.full-screen-header-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 24px 0;
|
padding: 24px 0;
|
||||||
|
|
@ -1,10 +1,10 @@
|
|||||||
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
||||||
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
||||||
import './FullViewHeader.styles.scss';
|
import './FullScreenHeader.styles.scss';
|
||||||
|
|
||||||
import history from 'lib/history';
|
import history from 'lib/history';
|
||||||
|
|
||||||
export default function FullViewHeader({
|
export default function FullScreenHeader({
|
||||||
overrideRoute,
|
overrideRoute,
|
||||||
}: {
|
}: {
|
||||||
overrideRoute?: string;
|
overrideRoute?: string;
|
||||||
@ -13,7 +13,7 @@ export default function FullViewHeader({
|
|||||||
history.push(overrideRoute || '/');
|
history.push(overrideRoute || '/');
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div className="full-view-header-container">
|
<div className="full-screen-header-container">
|
||||||
<div className="brand-logo" onClick={handleLogoClick}>
|
<div className="brand-logo" onClick={handleLogoClick}>
|
||||||
<img src="/Logos/signoz-brand-logo.svg" alt="SigNoz" />
|
<img src="/Logos/signoz-brand-logo.svg" alt="SigNoz" />
|
||||||
|
|
||||||
@ -23,6 +23,6 @@ export default function FullViewHeader({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
FullViewHeader.defaultProps = {
|
FullScreenHeader.defaultProps = {
|
||||||
overrideRoute: '/',
|
overrideRoute: '/',
|
||||||
};
|
};
|
@ -105,7 +105,7 @@ function FullView({
|
|||||||
panelTypeAndGraphManagerVisibility: PANEL_TYPES_VS_FULL_VIEW_TABLE,
|
panelTypeAndGraphManagerVisibility: PANEL_TYPES_VS_FULL_VIEW_TABLE,
|
||||||
});
|
});
|
||||||
|
|
||||||
const chartData = getUPlotChartData(response?.data?.payload);
|
const chartData = getUPlotChartData(response?.data?.payload, widget.fillSpans);
|
||||||
|
|
||||||
const isDarkMode = useIsDarkMode();
|
const isDarkMode = useIsDarkMode();
|
||||||
|
|
||||||
|
@ -196,6 +196,7 @@ function GraphLayout({ onAddPanelHandler }: GraphLayoutProps): JSX.Element {
|
|||||||
name={currentWidget?.id || ''}
|
name={currentWidget?.id || ''}
|
||||||
headerMenuList={widgetActions}
|
headerMenuList={widgetActions}
|
||||||
variables={variables}
|
variables={variables}
|
||||||
|
fillSpans={currentWidget?.fillSpans}
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
</CardContainer>
|
</CardContainer>
|
||||||
|
@ -3,18 +3,25 @@ import { Dashboard } from 'types/api/dashboard/getAll';
|
|||||||
export const filterDashboard = (
|
export const filterDashboard = (
|
||||||
searchValue: string,
|
searchValue: string,
|
||||||
dashboardList: Dashboard[],
|
dashboardList: Dashboard[],
|
||||||
): any[] => {
|
): Dashboard[] => {
|
||||||
// Convert the searchValue to lowercase for case-insensitive search
|
const searchValueLowerCase = searchValue?.toLowerCase();
|
||||||
const searchValueLowerCase = searchValue.toLowerCase();
|
|
||||||
|
|
||||||
// Use the filter method to find matching objects
|
// Filter by title, description, tags
|
||||||
return dashboardList.filter((item: Dashboard) => {
|
return dashboardList.filter((item: Dashboard) => {
|
||||||
// Convert each property value to lowercase for case-insensitive search
|
const { title, description, tags } = item.data;
|
||||||
const itemValues = Object.values(item?.data).map((value) =>
|
const itemValuesNew = [title, description];
|
||||||
value.toString().toLowerCase(),
|
|
||||||
);
|
if (tags && tags.length > 0) {
|
||||||
|
itemValuesNew.push(...tags);
|
||||||
|
}
|
||||||
|
|
||||||
// Check if any property value contains the searchValue
|
// Check if any property value contains the searchValue
|
||||||
return itemValues.some((value) => value.includes(searchValueLowerCase));
|
return itemValuesNew.some((value) => {
|
||||||
|
if (value) {
|
||||||
|
return value.toLowerCase().includes(searchValueLowerCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -70,7 +70,12 @@ function LiveLogsList({ logs }: LiveLogsListProps): JSX.Element {
|
|||||||
(_: number, log: ILog): JSX.Element => {
|
(_: number, log: ILog): JSX.Element => {
|
||||||
if (options.format === 'raw') {
|
if (options.format === 'raw') {
|
||||||
return (
|
return (
|
||||||
<RawLogView key={log.id} data={log} linesPerRow={options.maxLines} />
|
<RawLogView
|
||||||
|
key={log.id}
|
||||||
|
data={log}
|
||||||
|
linesPerRow={options.maxLines}
|
||||||
|
selectedFields={selectedFields}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,12 @@ function LogsExplorerList({
|
|||||||
(_: number, log: ILog): JSX.Element => {
|
(_: number, log: ILog): JSX.Element => {
|
||||||
if (options.format === 'raw') {
|
if (options.format === 'raw') {
|
||||||
return (
|
return (
|
||||||
<RawLogView key={log.id} data={log} linesPerRow={options.maxLines} />
|
<RawLogView
|
||||||
|
key={log.id}
|
||||||
|
data={log}
|
||||||
|
linesPerRow={options.maxLines}
|
||||||
|
selectedFields={selectedFields}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,7 +72,14 @@ function LogsTable(props: LogsTableProps): JSX.Element {
|
|||||||
const log = logs[index];
|
const log = logs[index];
|
||||||
|
|
||||||
if (viewMode === 'raw') {
|
if (viewMode === 'raw') {
|
||||||
return <RawLogView key={log.id} data={log} linesPerRow={linesPerRow} />;
|
return (
|
||||||
|
<RawLogView
|
||||||
|
key={log.id}
|
||||||
|
data={log}
|
||||||
|
linesPerRow={linesPerRow}
|
||||||
|
selectedFields={selected}
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -6,7 +6,7 @@ import { ArrowRightOutlined } from '@ant-design/icons';
|
|||||||
import { Button, Card, Typography } from 'antd';
|
import { Button, Card, Typography } from 'antd';
|
||||||
import getIngestionData from 'api/settings/getIngestionData';
|
import getIngestionData from 'api/settings/getIngestionData';
|
||||||
import cx from 'classnames';
|
import cx from 'classnames';
|
||||||
import FullViewHeader from 'container/FullViewHeader/FullViewHeader';
|
import FullScreenHeader from 'container/FullScreenHeader/FullScreenHeader';
|
||||||
import useAnalytics from 'hooks/analytics/useAnalytics';
|
import useAnalytics from 'hooks/analytics/useAnalytics';
|
||||||
import { useIsDarkMode } from 'hooks/useDarkMode';
|
import { useIsDarkMode } from 'hooks/useDarkMode';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
@ -211,7 +211,7 @@ export default function Onboarding(): JSX.Element {
|
|||||||
<div className={cx('container', isDarkMode ? 'darkMode' : 'lightMode')}>
|
<div className={cx('container', isDarkMode ? 'darkMode' : 'lightMode')}>
|
||||||
{activeStep === 1 && (
|
{activeStep === 1 && (
|
||||||
<>
|
<>
|
||||||
<FullViewHeader />
|
<FullScreenHeader />
|
||||||
<div className="onboardingHeader">
|
<div className="onboardingHeader">
|
||||||
<h1> Select a use-case to get started</h1>
|
<h1> Select a use-case to get started</h1>
|
||||||
</div>
|
</div>
|
||||||
|
@ -30,6 +30,7 @@ export default function DataSource(): JSX.Element {
|
|||||||
selectedDataSource,
|
selectedDataSource,
|
||||||
selectedFramework,
|
selectedFramework,
|
||||||
updateSelectedDataSource,
|
updateSelectedDataSource,
|
||||||
|
updateSelectedEnvironment,
|
||||||
updateServiceName,
|
updateServiceName,
|
||||||
updateSelectedFramework,
|
updateSelectedFramework,
|
||||||
} = useOnboardingContext();
|
} = useOnboardingContext();
|
||||||
@ -89,6 +90,7 @@ export default function DataSource(): JSX.Element {
|
|||||||
key={dataSource.name}
|
key={dataSource.name}
|
||||||
onClick={(): void => {
|
onClick={(): void => {
|
||||||
updateSelectedFramework(null);
|
updateSelectedFramework(null);
|
||||||
|
updateSelectedEnvironment(null);
|
||||||
updateSelectedDataSource(dataSource);
|
updateSelectedDataSource(dataSource);
|
||||||
form.setFieldsValue({ selectFramework: null });
|
form.setFieldsValue({ selectFramework: null });
|
||||||
}}
|
}}
|
||||||
|
@ -5,6 +5,7 @@ export const MaxLinesFieldWrapper = styled.div`
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
margin-bottom: 1.125rem;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export const MaxLinesInput = styled(InputNumber)`
|
export const MaxLinesInput = styled(InputNumber)`
|
||||||
|
@ -31,9 +31,7 @@ function OptionsMenu({
|
|||||||
{selectedOptionFormat === OptionFormatTypes.RAW && config?.maxLines && (
|
{selectedOptionFormat === OptionFormatTypes.RAW && config?.maxLines && (
|
||||||
<MaxLinesField config={config.maxLines} />
|
<MaxLinesField config={config.maxLines} />
|
||||||
)}
|
)}
|
||||||
{(selectedOptionFormat === OptionFormatTypes.LIST ||
|
{config?.addColumn && <AddColumnField config={config.addColumn} />}
|
||||||
selectedOptionFormat === OptionFormatTypes.TABLE) &&
|
|
||||||
config?.addColumn && <AddColumnField config={config.addColumn} />}
|
|
||||||
</OptionsContentWrapper>
|
</OptionsContentWrapper>
|
||||||
),
|
),
|
||||||
[config, selectedOptionFormat],
|
[config, selectedOptionFormat],
|
||||||
|
@ -199,10 +199,7 @@ function SideNav({
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isCloudUser() || isEECloudUser()) {
|
if (isCloudUser() || isEECloudUser()) {
|
||||||
const updatedUserManagementMenuItems = [
|
const updatedUserManagementMenuItems = [helpSupportMenuItem];
|
||||||
helpSupportMenuItem,
|
|
||||||
manageLicenseMenuItem,
|
|
||||||
];
|
|
||||||
|
|
||||||
setUserManagementMenuItems(updatedUserManagementMenuItems);
|
setUserManagementMenuItems(updatedUserManagementMenuItems);
|
||||||
} else if (currentVersion && latestVersion) {
|
} else if (currentVersion && latestVersion) {
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
.date-time-selection-container {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
import './DateTimeSelection.styles.scss';
|
||||||
|
|
||||||
import { SyncOutlined } from '@ant-design/icons';
|
import { SyncOutlined } from '@ant-design/icons';
|
||||||
import { Button } from 'antd';
|
import { Button } from 'antd';
|
||||||
import getLocalStorageKey from 'api/browser/localstorage/get';
|
import getLocalStorageKey from 'api/browser/localstorage/get';
|
||||||
@ -211,7 +213,6 @@ function DateTimeSelection({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onCustomDateHandler = (dateTimeRange: DateTimeRangeType): void => {
|
const onCustomDateHandler = (dateTimeRange: DateTimeRangeType): void => {
|
||||||
console.log('dateTimeRange', dateTimeRange);
|
|
||||||
if (dateTimeRange !== null) {
|
if (dateTimeRange !== null) {
|
||||||
const [startTimeMoment, endTimeMoment] = dateTimeRange;
|
const [startTimeMoment, endTimeMoment] = dateTimeRange;
|
||||||
if (startTimeMoment && endTimeMoment) {
|
if (startTimeMoment && endTimeMoment) {
|
||||||
@ -295,7 +296,7 @@ function DateTimeSelection({
|
|||||||
}, [location.pathname, updateTimeInterval, globalTimeLoading]);
|
}, [location.pathname, updateTimeInterval, globalTimeLoading]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<div className="date-time-selection-container">
|
||||||
<Form
|
<Form
|
||||||
form={formSelector}
|
form={formSelector}
|
||||||
layout="inline"
|
layout="inline"
|
||||||
@ -336,7 +337,7 @@ function DateTimeSelection({
|
|||||||
</FormContainer>
|
</FormContainer>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
{!hasSelectedTimeError && (
|
{!hasSelectedTimeError && selectedTime !== 'custom' && (
|
||||||
<RefreshText
|
<RefreshText
|
||||||
{...{
|
{...{
|
||||||
onLastRefreshHandler,
|
onLastRefreshHandler,
|
||||||
@ -352,7 +353,7 @@ function DateTimeSelection({
|
|||||||
setCustomDTPickerVisible(false);
|
setCustomDTPickerVisible(false);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,6 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const RefreshTextContainer = styled.div<Props>`
|
export const RefreshTextContainer = styled.div<Props>`
|
||||||
min-height: 2rem;
|
|
||||||
visibility: ${({ refreshButtonHidden }): string =>
|
visibility: ${({ refreshButtonHidden }): string =>
|
||||||
refreshButtonHidden ? 'hidden' : 'visible'};
|
refreshButtonHidden ? 'hidden' : 'visible'};
|
||||||
`;
|
`;
|
||||||
|
@ -10,7 +10,7 @@ import { Button, Card, Skeleton, Typography } from 'antd';
|
|||||||
import updateCreditCardApi from 'api/billing/checkout';
|
import updateCreditCardApi from 'api/billing/checkout';
|
||||||
import { SOMETHING_WENT_WRONG } from 'constants/api';
|
import { SOMETHING_WENT_WRONG } from 'constants/api';
|
||||||
import ROUTES from 'constants/routes';
|
import ROUTES from 'constants/routes';
|
||||||
import FullViewHeader from 'container/FullViewHeader/FullViewHeader';
|
import FullScreenHeader from 'container/FullScreenHeader/FullScreenHeader';
|
||||||
import useAnalytics from 'hooks/analytics/useAnalytics';
|
import useAnalytics from 'hooks/analytics/useAnalytics';
|
||||||
import useLicense from 'hooks/useLicense';
|
import useLicense from 'hooks/useLicense';
|
||||||
import { useNotifications } from 'hooks/useNotifications';
|
import { useNotifications } from 'hooks/useNotifications';
|
||||||
@ -106,7 +106,7 @@ export default function WorkspaceBlocked(): JSX.Element {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<FullViewHeader overrideRoute={ROUTES.WORKSPACE_LOCKED} />
|
<FullScreenHeader overrideRoute={ROUTES.WORKSPACE_LOCKED} />
|
||||||
|
|
||||||
<Card className="workspace-locked-container">
|
<Card className="workspace-locked-container">
|
||||||
{isLoadingLicenseData || !licensesData?.payload?.workSpaceBlock ? (
|
{isLoadingLicenseData || !licensesData?.payload?.workSpaceBlock ? (
|
||||||
|
2
go.mod
2
go.mod
@ -5,7 +5,7 @@ go 1.21
|
|||||||
require (
|
require (
|
||||||
github.com/ClickHouse/clickhouse-go/v2 v2.15.0
|
github.com/ClickHouse/clickhouse-go/v2 v2.15.0
|
||||||
github.com/SigNoz/govaluate v0.0.0-20220522085550-d19c08c206cb
|
github.com/SigNoz/govaluate v0.0.0-20220522085550-d19c08c206cb
|
||||||
github.com/SigNoz/signoz-otel-collector v0.88.8
|
github.com/SigNoz/signoz-otel-collector v0.88.9
|
||||||
github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974
|
github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974
|
||||||
github.com/SigNoz/zap_otlp/zap_otlp_sync v0.0.0-20230822164844-1b861a431974
|
github.com/SigNoz/zap_otlp/zap_otlp_sync v0.0.0-20230822164844-1b861a431974
|
||||||
github.com/antonmedv/expr v1.15.3
|
github.com/antonmedv/expr v1.15.3
|
||||||
|
4
go.sum
4
go.sum
@ -98,8 +98,8 @@ github.com/SigNoz/govaluate v0.0.0-20220522085550-d19c08c206cb h1:bneLSKPf9YUSFm
|
|||||||
github.com/SigNoz/govaluate v0.0.0-20220522085550-d19c08c206cb/go.mod h1:JznGDNg9x1cujDKa22RaQOimOvvEfy3nxzDGd8XDgmA=
|
github.com/SigNoz/govaluate v0.0.0-20220522085550-d19c08c206cb/go.mod h1:JznGDNg9x1cujDKa22RaQOimOvvEfy3nxzDGd8XDgmA=
|
||||||
github.com/SigNoz/prometheus v1.9.78 h1:bB3yuDrRzi/Mv00kWayR9DZbyjTuGfendSqISyDcXiY=
|
github.com/SigNoz/prometheus v1.9.78 h1:bB3yuDrRzi/Mv00kWayR9DZbyjTuGfendSqISyDcXiY=
|
||||||
github.com/SigNoz/prometheus v1.9.78/go.mod h1:MffmFu2qFILQrOHehx3D0XjYtaZMVfI+Ppeiv98x4Ww=
|
github.com/SigNoz/prometheus v1.9.78/go.mod h1:MffmFu2qFILQrOHehx3D0XjYtaZMVfI+Ppeiv98x4Ww=
|
||||||
github.com/SigNoz/signoz-otel-collector v0.88.8 h1:oa/0gSfkGhjzXtz1htzWBQx3p4VhBPs5iwMRxqfa2uo=
|
github.com/SigNoz/signoz-otel-collector v0.88.9 h1:7bbJSXrSZcQsdEVVLsjsNXm/bWe9MhKu8qfXp8MlXQM=
|
||||||
github.com/SigNoz/signoz-otel-collector v0.88.8/go.mod h1:7I4FWwraVSnDywsPNbo8TdHDsPxShtYkGU5usr6dTtk=
|
github.com/SigNoz/signoz-otel-collector v0.88.9/go.mod h1:7I4FWwraVSnDywsPNbo8TdHDsPxShtYkGU5usr6dTtk=
|
||||||
github.com/SigNoz/zap_otlp v0.1.0 h1:T7rRcFN87GavY8lDGZj0Z3Xv6OhJA6Pj3I9dNPmqvRc=
|
github.com/SigNoz/zap_otlp v0.1.0 h1:T7rRcFN87GavY8lDGZj0Z3Xv6OhJA6Pj3I9dNPmqvRc=
|
||||||
github.com/SigNoz/zap_otlp v0.1.0/go.mod h1:lcHvbDbRgvDnPxo9lDlaL1JK2PyOyouP/C3ynnYIvyo=
|
github.com/SigNoz/zap_otlp v0.1.0/go.mod h1:lcHvbDbRgvDnPxo9lDlaL1JK2PyOyouP/C3ynnYIvyo=
|
||||||
github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974 h1:PKVgdf83Yw+lZJbFtNGBgqXiXNf3+kOXW2qZ7Ms7OaY=
|
github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974 h1:PKVgdf83Yw+lZJbFtNGBgqXiXNf3+kOXW2qZ7Ms7OaY=
|
||||||
|
@ -192,7 +192,7 @@ services:
|
|||||||
<<: *db-depend
|
<<: *db-depend
|
||||||
|
|
||||||
otel-collector-migrator:
|
otel-collector-migrator:
|
||||||
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.88.8}
|
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.88.9}
|
||||||
container_name: otel-migrator
|
container_name: otel-migrator
|
||||||
command:
|
command:
|
||||||
- "--dsn=tcp://clickhouse:9000"
|
- "--dsn=tcp://clickhouse:9000"
|
||||||
@ -205,7 +205,7 @@ services:
|
|||||||
# condition: service_healthy
|
# condition: service_healthy
|
||||||
|
|
||||||
otel-collector:
|
otel-collector:
|
||||||
image: signoz/signoz-otel-collector:0.88.8
|
image: signoz/signoz-otel-collector:0.88.9
|
||||||
container_name: signoz-otel-collector
|
container_name: signoz-otel-collector
|
||||||
command:
|
command:
|
||||||
[
|
[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user