@odigos/ui-kit 0.0.66 → 0.0.67
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.
- package/CHANGELOG.md +7 -0
- package/lib/containers/system-settings/index.d.ts +2 -1
- package/lib/containers/system-settings/settings/advanced-settings.d.ts +4 -0
- package/lib/containers/system-settings/settings/collector-gateway-settings.d.ts +3 -3
- package/lib/containers/system-settings/settings/collector-node-settings.d.ts +3 -3
- package/lib/containers/system-settings/settings/general-settings.d.ts +4 -0
- package/lib/containers/system-settings/settings/options.d.ts +1 -4
- package/lib/containers/system-settings/settings/rollback-settings.d.ts +4 -0
- package/lib/containers/system-settings/settings/styled.d.ts +6 -0
- package/lib/containers/system-settings/settings/types.d.ts +8 -0
- package/lib/containers/system-settings/settings/ui-settings.d.ts +3 -3
- package/lib/containers.js +254 -226
- package/lib/types/common/index.d.ts +5 -0
- package/lib/types/config/index.d.ts +2 -24
- package/lib/types.js +8 -31
- package/package.json +1 -1
- package/lib/containers/system-settings/settings/other-settings.d.ts +0 -4
- package/lib/containers/system-settings/settings/user-instrumnetation-envs-settings.d.ts +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.67](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.66...ui-kit-v0.0.67) (2025-07-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* change system setting fields ([#267](https://github.com/odigos-io/ui-kit/issues/267)) ([25b483a](https://github.com/odigos-io/ui-kit/commit/25b483a8bc92bb07cb251f14859567d51631c641))
|
|
9
|
+
|
|
3
10
|
## [0.0.66](https://github.com/odigos-io/ui-kit/compare/ui-kit-v0.0.65...ui-kit-v0.0.66) (2025-07-22)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type FC } from 'react';
|
|
2
|
-
import type
|
|
2
|
+
import { InstallationMethod, type OdigosConfig } from '@/types';
|
|
3
3
|
interface SystemSettingsProps {
|
|
4
|
+
installationMethod: InstallationMethod;
|
|
4
5
|
fetchSettings: () => Promise<OdigosConfig | undefined>;
|
|
5
6
|
onSave: (payload: OdigosConfig) => Promise<void>;
|
|
6
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type
|
|
3
|
-
declare const CollectorGatewaySettings:
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type SettingsProps } from './types';
|
|
3
|
+
declare const CollectorGatewaySettings: React.ForwardRefExoticComponent<SettingsProps & React.RefAttributes<HTMLDivElement>>;
|
|
4
4
|
export { CollectorGatewaySettings };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type
|
|
3
|
-
declare const CollectorNodeSettings:
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type SettingsProps } from './types';
|
|
3
|
+
declare const CollectorNodeSettings: React.ForwardRefExoticComponent<SettingsProps & React.RefAttributes<HTMLDivElement>>;
|
|
4
4
|
export { CollectorNodeSettings };
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import type { DropdownOption } from '@/components';
|
|
2
|
-
import { AgentEnvVarsInjectionMethod, MountMethod
|
|
3
|
-
export declare const UI_MODE_OPTIONS: DropdownOption<UiMode>[];
|
|
4
|
-
export declare const INSTRUMENTATION_LANG_OPTIONS: DropdownOption<ProgrammingLanguages>[];
|
|
2
|
+
import { AgentEnvVarsInjectionMethod, MountMethod } from '@/types';
|
|
5
3
|
export declare const MOUNT_METHOD_OPTIONS: DropdownOption<MountMethod>[];
|
|
6
4
|
export declare const AGENT_ENV_VARS_INJECTION_METHOD_OPTIONS: DropdownOption<AgentEnvVarsInjectionMethod>[];
|
|
7
|
-
export declare const PROFILE_OPTIONS: DropdownOption<Profile>[];
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export declare const Card: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
2
2
|
export declare const CardTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("@/components").TextProps, never>> & string & Omit<import("react").FC<import("@/components").TextProps>, keyof import("react").Component<any, {}, any>>;
|
|
3
|
+
export declare const RowOfFields: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$gap" | "$alignItems" | "$justifyContent" | "$wrap"> & {
|
|
4
|
+
$gap?: number;
|
|
5
|
+
$alignItems?: import("styled-components").CSSProperties["alignItems"];
|
|
6
|
+
$justifyContent?: import("styled-components").CSSProperties["justifyContent"];
|
|
7
|
+
$wrap?: import("styled-components").CSSProperties["flexWrap"];
|
|
8
|
+
}, never>> & string;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { OdigosConfig } from '@/types';
|
|
2
|
+
export declare enum SettingsTabs {
|
|
3
|
+
General = "General",
|
|
4
|
+
Ui = "UI",
|
|
5
|
+
Rollback = "Rollback",
|
|
6
|
+
CollectorNode = "Collector Node",
|
|
7
|
+
CollectorGateway = "Collector Gateway",
|
|
8
|
+
Advanced = "Advanced"
|
|
9
|
+
}
|
|
2
10
|
export interface SettingsProps {
|
|
3
11
|
formData: OdigosConfig;
|
|
4
12
|
handleFormChange: (key: keyof OdigosConfig | string, value: any) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type
|
|
3
|
-
declare const UiSettings:
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type SettingsProps } from './types';
|
|
3
|
+
declare const UiSettings: React.ForwardRefExoticComponent<SettingsProps & React.RefAttributes<HTMLDivElement>>;
|
|
4
4
|
export { UiSettings };
|
package/lib/containers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, Fragment, useCallback, Children } from 'react';
|
|
2
2
|
import styled, { css } from 'styled-components';
|
|
3
3
|
import { b as DISPLAY_TITLES, T as Theme, U as usePendingStore, V as useNotificationStore, O as useDrawerStore, B as BUTTON_TEXTS, W as useEntityStore, A as ACTION_OPTIONS, g as getActionIcon, z as useModalStore, F as FORM_ALERTS, X as useFilterStore, D as DISPLAY_LANGUAGES, M as MONITORS_OPTIONS, d as getInstrumentationRuleIcon, Y as useDataStreamStore, Z as useInstrumentStore, c as getEntityId, S as STORAGE_KEYS, a as DEFAULT_DATA_STREAM_NAME, _ as useSetupStore, e as getProgrammingLanguageIcon, I as INSTRUMENTATION_RULE_OPTIONS, $ as useSelectedStore, j as ImageErrorIcon, a0 as useDarkMode } from './index-bd48e6e2.js';
|
|
4
|
-
import { ActionType, ActionKeyTypes, InputTypes, FieldTypes, EntityTypes, StatusType, Crud, OtherStatus, NodeTypes, EdgeTypes, AddNodeTypes, SignalType, HeadersCollectionKeyTypes, CustomInstrumentationsKeyTypes, CodeAttributesKeyTypes, PayloadCollectionKeyTypes, InstrumentationRuleType, K8sResourceKind,
|
|
4
|
+
import { ActionType, ActionKeyTypes, InputTypes, FieldTypes, EntityTypes, StatusType, Crud, OtherStatus, NodeTypes, EdgeTypes, AddNodeTypes, SignalType, HeadersCollectionKeyTypes, CustomInstrumentationsKeyTypes, CodeAttributesKeyTypes, PayloadCollectionKeyTypes, InstrumentationRuleType, K8sResourceKind, MountMethod, AgentEnvVarsInjectionMethod, InstallationMethod } from './types.js';
|
|
5
5
|
import { e as DataCardFieldTypes, p as FieldLabel, C as Checkbox, o as FieldError, v as Input, x as InputTable, K as KeyValueInputsList, w as InputList, _ as Text, R as Segment, Q as SectionTitle, j as DocsButton, z as MonitorsCheckboxes, $ as TextArea, k as Drawer, c as ConditionDetails, D as DataCard, a5 as FlexColumn, M as Modal, N as NavigationButtons, a9 as ModalBody, L as NotificationNote, A as AutocompleteInput, i as Divider, W as Status, a4 as FlexRow, a1 as Tooltip, s as IconWrapped, G as MonitorsIcons, aa as TableContainer, ab as TableTitleWrap, r as IconTitleBadge, ac as TableWrap, y as InteractiveTable, a6 as CenterThis, J as NoDataFound, a2 as TraceLoader, a as Badge, E as ExtendArrow, a7 as VerticalScroll, U as SelectionButton, B as Button, n as Dropdown, ad as nodeConfig, ae as useNodesState, af as useEdgesState, ag as Flow, ah as applyNodeChanges, P as Popup, a0 as Toggle, I as IconButton, ai as AddButton, F as FadeLoader, g as DataTab, X as Stepper, d as DataCardFields, Z as Tag, aj as MarkerType, t as IconsNav, ak as CopyText, h as DescribeRow, al as PodContainer, am as SourceContainer, q as IconGroup, O as PopupForm } from './index-f2da9ad4.js';
|
|
6
6
|
import { i as isEmpty, s as safeJsonParse, d as deepClone } from './index-5e5f7bda.js';
|
|
7
7
|
import { C as CheckCircledIcon, O as OdigosLogo } from './index-50101bec.js';
|
|
@@ -4723,6 +4723,16 @@ const SystemOverview = ({ tokens, saveToken, fetchDescribeOdigos }) => {
|
|
|
4723
4723
|
React.createElement(Describe, { fetchDescribeOdigos: fetchDescribeOdigos })))));
|
|
4724
4724
|
};
|
|
4725
4725
|
|
|
4726
|
+
var SettingsTabs;
|
|
4727
|
+
(function (SettingsTabs) {
|
|
4728
|
+
SettingsTabs["General"] = "General";
|
|
4729
|
+
SettingsTabs["Ui"] = "UI";
|
|
4730
|
+
SettingsTabs["Rollback"] = "Rollback";
|
|
4731
|
+
SettingsTabs["CollectorNode"] = "Collector Node";
|
|
4732
|
+
SettingsTabs["CollectorGateway"] = "Collector Gateway";
|
|
4733
|
+
SettingsTabs["Advanced"] = "Advanced";
|
|
4734
|
+
})(SettingsTabs || (SettingsTabs = {}));
|
|
4735
|
+
|
|
4726
4736
|
const Card = styled.div `
|
|
4727
4737
|
align-self: stretch;
|
|
4728
4738
|
display: flex;
|
|
@@ -4739,269 +4749,203 @@ const CardTitle = styled(Text) `
|
|
|
4739
4749
|
font-weight: 600;
|
|
4740
4750
|
line-height: 20px;
|
|
4741
4751
|
`;
|
|
4752
|
+
const RowOfFields = styled(FlexRow) `
|
|
4753
|
+
width: 100%;
|
|
4754
|
+
gap: 12px;
|
|
4755
|
+
align-items: flex-start;
|
|
4756
|
+
`;
|
|
4742
4757
|
|
|
4743
|
-
const
|
|
4744
|
-
{
|
|
4745
|
-
{ id: UiMode.ReadOnly, value: 'Read Only' },
|
|
4746
|
-
];
|
|
4747
|
-
const INSTRUMENTATION_LANG_OPTIONS = [
|
|
4748
|
-
{
|
|
4749
|
-
id: ProgrammingLanguages.Go,
|
|
4750
|
-
value: DISPLAY_LANGUAGES[ProgrammingLanguages.Go],
|
|
4751
|
-
icon: getProgrammingLanguageIcon(ProgrammingLanguages.Go),
|
|
4752
|
-
},
|
|
4753
|
-
{
|
|
4754
|
-
id: ProgrammingLanguages.JavaScript,
|
|
4755
|
-
value: DISPLAY_LANGUAGES[ProgrammingLanguages.JavaScript],
|
|
4756
|
-
icon: getProgrammingLanguageIcon(ProgrammingLanguages.JavaScript),
|
|
4757
|
-
},
|
|
4758
|
-
{
|
|
4759
|
-
id: ProgrammingLanguages.Python,
|
|
4760
|
-
value: DISPLAY_LANGUAGES[ProgrammingLanguages.Python],
|
|
4761
|
-
icon: getProgrammingLanguageIcon(ProgrammingLanguages.Python),
|
|
4762
|
-
},
|
|
4763
|
-
{
|
|
4764
|
-
id: ProgrammingLanguages.Java,
|
|
4765
|
-
value: DISPLAY_LANGUAGES[ProgrammingLanguages.Java],
|
|
4766
|
-
icon: getProgrammingLanguageIcon(ProgrammingLanguages.Java),
|
|
4767
|
-
},
|
|
4768
|
-
{
|
|
4769
|
-
id: ProgrammingLanguages.Php,
|
|
4770
|
-
value: DISPLAY_LANGUAGES[ProgrammingLanguages.Php],
|
|
4771
|
-
icon: getProgrammingLanguageIcon(ProgrammingLanguages.Php),
|
|
4772
|
-
},
|
|
4773
|
-
{
|
|
4774
|
-
id: ProgrammingLanguages.Ruby,
|
|
4775
|
-
value: DISPLAY_LANGUAGES[ProgrammingLanguages.Ruby],
|
|
4776
|
-
icon: getProgrammingLanguageIcon(ProgrammingLanguages.Ruby),
|
|
4777
|
-
},
|
|
4778
|
-
{
|
|
4779
|
-
id: ProgrammingLanguages.DotNet,
|
|
4780
|
-
value: DISPLAY_LANGUAGES[ProgrammingLanguages.DotNet],
|
|
4781
|
-
icon: getProgrammingLanguageIcon(ProgrammingLanguages.DotNet),
|
|
4782
|
-
},
|
|
4783
|
-
];
|
|
4784
|
-
const MOUNT_METHOD_OPTIONS = [
|
|
4785
|
-
{ id: MountMethod.VirtualDevice, value: 'Virtual Device' },
|
|
4786
|
-
{ id: MountMethod.HostPath, value: 'Host Path' },
|
|
4787
|
-
// { id: MountMethod.InitContainer, value: 'Init Container' },
|
|
4788
|
-
];
|
|
4789
|
-
const AGENT_ENV_VARS_INJECTION_METHOD_OPTIONS = [
|
|
4790
|
-
{ id: AgentEnvVarsInjectionMethod.Loader, value: 'Loader' },
|
|
4791
|
-
{ id: AgentEnvVarsInjectionMethod.PodManifest, value: 'Pod Manifest' },
|
|
4792
|
-
{ id: AgentEnvVarsInjectionMethod.LoaderFallbackToPodManifest, value: 'Loader Fallback to Pod Manifest' },
|
|
4793
|
-
];
|
|
4794
|
-
const PROFILE_OPTIONS = [
|
|
4795
|
-
// { id: Profile.CategoryAttributes, value: 'Category Attributes' },
|
|
4796
|
-
{ id: Profile.CodeAttributes, value: 'Code Attributes' },
|
|
4797
|
-
// { id: Profile.CopyScope, value: 'Copy Scope' },
|
|
4798
|
-
// { id: Profile.HostnameAsPodname, value: 'Hostname as Podname' },
|
|
4799
|
-
{ id: Profile.FullPayloadCollection, value: 'Full Payload Collection' },
|
|
4800
|
-
{ id: Profile.DbPayloadCollection, value: 'DB Payload Collection' },
|
|
4801
|
-
{ id: Profile.QueryOperationDetector, value: 'Query Operation Detector' },
|
|
4802
|
-
// { id: Profile.Semconv, value: 'Semconv' },
|
|
4803
|
-
// { id: Profile.ReduceSpanNameCardinality, value: 'Reduce Span Name Cardinality' },
|
|
4804
|
-
{ id: Profile.AllowConcurrentAgents, value: 'Allow Concurrent Agents' },
|
|
4805
|
-
{ id: Profile.JavaEbpfInstrumentations, value: 'Java EBPF Instrumentations' },
|
|
4806
|
-
{ id: Profile.JavaNativeInstrumentations, value: 'Java Native Instrumentations' },
|
|
4807
|
-
// { id: Profile.LegacyDotnetInstrumentation, value: 'Legacy .NET Instrumentation' },
|
|
4808
|
-
// { id: Profile.MountMethodK8sHostPath, value: 'Mount Method K8s Host Path' },
|
|
4809
|
-
// { id: Profile.MountMethodK8sVirtualDevice, value: 'Mount Method K8s Virtual Device' },
|
|
4810
|
-
// { id: Profile.PodManifestEnvVarInjection, value: 'Pod Manifest Env Var Injection' },
|
|
4811
|
-
// { id: Profile.DisableGin, value: 'Disable Gin' },
|
|
4812
|
-
// { id: Profile.SmallBatches, value: 'Small Batches' },
|
|
4813
|
-
{ id: Profile.SizeS, value: 'Size S' },
|
|
4814
|
-
{ id: Profile.SizeM, value: 'Size M' },
|
|
4815
|
-
{ id: Profile.SizeL, value: 'Size L' },
|
|
4816
|
-
];
|
|
4817
|
-
|
|
4818
|
-
const UiSettings = ({ formData, handleFormChange }) => {
|
|
4819
|
-
return (React.createElement(Card, null,
|
|
4758
|
+
const UiSettings = forwardRef(({ formData, handleFormChange }, ref) => {
|
|
4759
|
+
return (React.createElement(Card, { ref: ref, id: SettingsTabs.Ui },
|
|
4820
4760
|
React.createElement(CardTitle, null, "UI"),
|
|
4821
|
-
React.createElement(
|
|
4822
|
-
React.createElement(Input, { title: 'UI Pagination Limit', tooltip: 'Pagination limit for UI paginated fetching', type: 'number', value: formData.uiPaginationLimit?.toString() || '', onChange: (e) => {
|
|
4823
|
-
const { value } = e.target;
|
|
4824
|
-
handleFormChange('uiPaginationLimit', value === '' ? null : Number(value));
|
|
4825
|
-
} }),
|
|
4826
|
-
React.createElement(Input, { title: 'Central Backend URL', tooltip: 'URL of the central backend', value: formData.centralBackendURL || '', onChange: (e) => {
|
|
4761
|
+
React.createElement(Input, { title: 'Central Backend URL', tooltip: 'URL of the central backend', required: true, value: formData.centralBackendURL || '', onChange: (e) => {
|
|
4827
4762
|
const { value } = e.target;
|
|
4828
4763
|
handleFormChange('centralBackendURL', value || null);
|
|
4829
4764
|
} }),
|
|
4830
|
-
React.createElement(Input, { title: 'OIDC Tenant URL', tooltip: 'URL of the OIDC tenant', value: formData.oidc?.tenantUrl || '', onChange: (e) => {
|
|
4765
|
+
React.createElement(Input, { title: 'OIDC Tenant URL', tooltip: 'URL of the OIDC tenant', required: true, value: formData.oidc?.tenantUrl || '', onChange: (e) => {
|
|
4831
4766
|
const { value } = e.target;
|
|
4832
4767
|
handleFormChange('oidc.tenantUrl', value || null);
|
|
4833
4768
|
} }),
|
|
4834
|
-
React.createElement(Input, { title: 'OIDC Client ID', tooltip: 'Client ID of the OIDC application', value: formData.oidc?.clientId || '', onChange: (e) => {
|
|
4769
|
+
React.createElement(Input, { title: 'OIDC Client ID', tooltip: 'Client ID of the OIDC application', required: true, value: formData.oidc?.clientId || '', onChange: (e) => {
|
|
4835
4770
|
const { value } = e.target;
|
|
4836
4771
|
handleFormChange('oidc.clientId', value || null);
|
|
4837
4772
|
} }),
|
|
4838
|
-
React.createElement(Input, { title: 'OIDC Client Secret', tooltip: 'Client Secret of the OIDC application', type: 'password', value: formData.oidc?.clientSecret || '', onChange: (e) => {
|
|
4773
|
+
React.createElement(Input, { title: 'OIDC Client Secret', tooltip: 'Client Secret of the OIDC application', type: 'password', required: true, value: formData.oidc?.clientSecret || '', onChange: (e) => {
|
|
4839
4774
|
const { value } = e.target;
|
|
4840
4775
|
handleFormChange('oidc.clientSecret', value || null);
|
|
4841
4776
|
} })));
|
|
4842
|
-
};
|
|
4777
|
+
});
|
|
4778
|
+
UiSettings.displayName = UiSettings.name;
|
|
4843
4779
|
|
|
4844
|
-
const
|
|
4845
|
-
return (React.createElement(Card,
|
|
4846
|
-
React.createElement(CardTitle, null, "
|
|
4847
|
-
React.createElement(Toggle, { title: 'Telemetry Enabled', tooltip: 'Enable anonymous telemetry collection', initialValue: formData.telemetryEnabled || false, onChange: (bool) => handleFormChange('telemetryEnabled', bool) }),
|
|
4848
|
-
React.createElement(Toggle, { title: 'OpenShift Enabled', tooltip: 'Enable OpenShift-specific features', initialValue: formData.openshiftEnabled || false, onChange: (bool) => handleFormChange('openshiftEnabled', bool) }),
|
|
4780
|
+
const GeneralSettings = forwardRef(({ formData, handleFormChange }, ref) => {
|
|
4781
|
+
return (React.createElement(Card, { ref: ref, id: SettingsTabs.General },
|
|
4782
|
+
React.createElement(CardTitle, null, "General"),
|
|
4849
4783
|
React.createElement(Toggle, { title: 'Karpenter Enabled', tooltip: 'Enable Karpenter support', initialValue: formData.karpenterEnabled || false, onChange: (bool) => handleFormChange('karpenterEnabled', bool) }),
|
|
4850
|
-
React.createElement(Toggle, { title: 'PSP Enabled', tooltip: 'Enable Pod Security Policy support', initialValue: formData.psp || false, onChange: (bool) => handleFormChange('psp', bool) }),
|
|
4851
4784
|
React.createElement(Toggle, { title: 'Allow Concurrent Agents', tooltip: 'Allow concurrent running agents', initialValue: formData.allowConcurrentAgents || false, onChange: (bool) => handleFormChange('allowConcurrentAgents', bool) }),
|
|
4852
|
-
React.createElement(Toggle, { title: 'Skip Webhook Issuer Creation', tooltip: 'Skip creation of the webhook issuer', initialValue: formData.skipWebhookIssuerCreation || false, onChange: (bool) => handleFormChange('skipWebhookIssuerCreation', bool) }),
|
|
4853
4785
|
React.createElement(Toggle, { title: 'Automatic Rollout Disabled', tooltip: 'Disable automatic rollout of pods after instrumentation', initialValue: formData.rollout?.automaticRolloutDisabled || false, onChange: (bool) => handleFormChange('rollout.automaticRolloutDisabled', bool) }),
|
|
4854
|
-
React.createElement(Input, { title: 'Cluster Name', tooltip: 'Name of the cluster', value: formData.clusterName || '', onChange: (e) => {
|
|
4786
|
+
React.createElement(Input, { title: 'Cluster Name', tooltip: 'Name of the cluster', required: true, value: formData.clusterName || '', onChange: (e) => {
|
|
4855
4787
|
const { value } = e.target;
|
|
4856
4788
|
handleFormChange('clusterName', value || null);
|
|
4857
4789
|
} }),
|
|
4858
|
-
React.createElement(Input, { title: 'Image Prefix', tooltip: '
|
|
4790
|
+
React.createElement(Input, { title: 'Image Prefix', tooltip: 'Docker image prefix for all Odigos components', disabled: true, required: true, value: formData.imagePrefix || '', onChange: (e) => {
|
|
4859
4791
|
const { value } = e.target;
|
|
4860
4792
|
handleFormChange('imagePrefix', value || null);
|
|
4861
4793
|
} }),
|
|
4862
|
-
React.createElement(
|
|
4863
|
-
React.createElement(
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
React.createElement(
|
|
4872
|
-
const { value } = e.target;
|
|
4873
|
-
handleFormChange('odigletHealthProbeBindPort', value === '' ? null : Number(value));
|
|
4874
|
-
} }),
|
|
4794
|
+
React.createElement(KeyValueInputsList, { title: 'Node Selector', tooltip: 'NodeSelector is a map of key-value Kubernetes NodeSelector labels to apply to all Odigos components. Note that Odigos will only be able to instrument applications on the same node. This setting can be applied only via the CLI.', disabled: true, required: true, value: Object.entries(formData.nodeSelector || {}).map(([key, value]) => ({ key, value })) }),
|
|
4795
|
+
React.createElement(RowOfFields, null,
|
|
4796
|
+
React.createElement(InputList, { title: 'Ignored Namespaces', tooltip: 'List of namespaces to exclude from instrumentation', required: true, value: formData.ignoredNamespaces || [], onChange: (arr) => handleFormChange('ignoredNamespaces', arr) }),
|
|
4797
|
+
React.createElement(InputList, { title: 'Ignored Containers', tooltip: 'List of container names to exclude from instrumentation, this is a global setting and will be applied to all applications', required: true, value: formData.ignoredContainers || [], onChange: (arr) => handleFormChange('ignoredContainers', arr) }))));
|
|
4798
|
+
});
|
|
4799
|
+
GeneralSettings.displayName = GeneralSettings.name;
|
|
4800
|
+
|
|
4801
|
+
const RollbackSettings = forwardRef(({ formData, handleFormChange }, ref) => {
|
|
4802
|
+
return (React.createElement(Card, { ref: ref, id: SettingsTabs.Rollback },
|
|
4803
|
+
React.createElement(CardTitle, null, "Rollback"),
|
|
4875
4804
|
React.createElement(Toggle, { title: 'Rollback Disabled', tooltip: 'Disable rollback', initialValue: formData.rollbackDisabled || false, onChange: (bool) => handleFormChange('rollbackDisabled', bool) }),
|
|
4876
|
-
React.createElement(
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
})), onChange: (arr) => handleFormChange('nodeSelector', arr.reduce((acc, { key, value }) => ({
|
|
4888
|
-
...acc,
|
|
4889
|
-
[key]: value,
|
|
4890
|
-
}), {})) })));
|
|
4891
|
-
};
|
|
4805
|
+
React.createElement(RowOfFields, null,
|
|
4806
|
+
React.createElement(Input, { title: 'Rollback Grace Time', tooltip: 'Grace time for rollback', required: true, value: formData.rollbackGraceTime || '', onChange: (e) => {
|
|
4807
|
+
const { value } = e.target;
|
|
4808
|
+
handleFormChange('rollbackGraceTime', value || null);
|
|
4809
|
+
} }),
|
|
4810
|
+
React.createElement(Input, { title: 'Rollback Stability Window', tooltip: 'Stability window for rollback', required: true, value: formData.rollbackStabilityWindow || '', onChange: (e) => {
|
|
4811
|
+
const { value } = e.target;
|
|
4812
|
+
handleFormChange('rollbackStabilityWindow', value || null);
|
|
4813
|
+
} }))));
|
|
4814
|
+
});
|
|
4815
|
+
RollbackSettings.displayName = RollbackSettings.name;
|
|
4892
4816
|
|
|
4893
|
-
const
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
4903
|
-
} }),
|
|
4904
|
-
React.createElement(Input, { title: 'Limit Memory (MB)', tooltip: 'Limit memory for the collector node in Megabytes', type: 'number', value: formData.collectorNode?.limitMemoryMiB?.toString() || '', onChange: (e) => {
|
|
4905
|
-
const { value } = e.target;
|
|
4906
|
-
handleFormChange('collectorNode.limitMemoryMiB', value === '' ? null : Number(value));
|
|
4907
|
-
} }),
|
|
4908
|
-
React.createElement(Input, { title: 'Request CPU (Millicores)', tooltip: 'Request CPU for the collector node in Millicores', type: 'number', value: formData.collectorNode?.requestCPUm?.toString() || '', onChange: (e) => {
|
|
4909
|
-
const { value } = e.target;
|
|
4910
|
-
handleFormChange('collectorNode.requestCPUm', value === '' ? null : Number(value));
|
|
4911
|
-
} }),
|
|
4912
|
-
React.createElement(Input, { title: 'Limit CPU (Millicores)', tooltip: 'Limit CPU for the collector node in Millicores', type: 'number', value: formData.collectorNode?.limitCPUm?.toString() || '', onChange: (e) => {
|
|
4913
|
-
const { value } = e.target;
|
|
4914
|
-
handleFormChange('collectorNode.limitCPUm', value === '' ? null : Number(value));
|
|
4915
|
-
} }),
|
|
4916
|
-
React.createElement(Input, { title: 'Memory Limiter Limit (MB)', tooltip: 'Memory limiter limit for the collector node in Megabytes', type: 'number', value: formData.collectorNode?.memoryLimiterLimitMiB?.toString() || '', onChange: (e) => {
|
|
4917
|
-
const { value } = e.target;
|
|
4918
|
-
handleFormChange('collectorNode.memoryLimiterLimitMiB', value === '' ? null : Number(value));
|
|
4919
|
-
} }),
|
|
4920
|
-
React.createElement(Input, { title: 'Memory Limiter Spike Limit (MB)', tooltip: 'Memory limiter spike limit for the collector node in Megabytes', type: 'number', value: formData.collectorNode?.memoryLimiterSpikeLimitMiB?.toString() || '', onChange: (e) => {
|
|
4921
|
-
const { value } = e.target;
|
|
4922
|
-
handleFormChange('collectorNode.memoryLimiterSpikeLimitMiB', value === '' ? null : Number(value));
|
|
4923
|
-
} }),
|
|
4924
|
-
React.createElement(Input, { title: 'Go Memory Limit (MB)', tooltip: 'Go memory limit for the collector node in Megabytes', type: 'number', value: formData.collectorNode?.goMemLimitMiB?.toString() || '', onChange: (e) => {
|
|
4925
|
-
const { value } = e.target;
|
|
4926
|
-
handleFormChange('collectorNode.goMemLimitMiB', value === '' ? null : Number(value));
|
|
4927
|
-
} }),
|
|
4928
|
-
React.createElement(Input, { title: 'K8s Node Logs Directory', tooltip: 'Target directory for K8s logs if `/var/log` is a symlink', value: formData.collectorNode?.k8sNodeLogsDirectory || '', onChange: (e) => {
|
|
4929
|
-
const { value } = e.target;
|
|
4930
|
-
handleFormChange('collectorNode.k8sNodeLogsDirectory', value || null);
|
|
4931
|
-
} })));
|
|
4932
|
-
};
|
|
4817
|
+
const MOUNT_METHOD_OPTIONS = [
|
|
4818
|
+
{ id: MountMethod.VirtualDevice, value: 'Virtual Device' },
|
|
4819
|
+
{ id: MountMethod.HostPath, value: 'Host Path' },
|
|
4820
|
+
{ id: MountMethod.InitContainer, value: 'Init Container' },
|
|
4821
|
+
];
|
|
4822
|
+
const AGENT_ENV_VARS_INJECTION_METHOD_OPTIONS = [
|
|
4823
|
+
{ id: AgentEnvVarsInjectionMethod.Loader, value: 'Loader' },
|
|
4824
|
+
{ id: AgentEnvVarsInjectionMethod.PodManifest, value: 'Pod Manifest' },
|
|
4825
|
+
{ id: AgentEnvVarsInjectionMethod.LoaderFallbackToPodManifest, value: 'Loader Fallback to Pod Manifest' },
|
|
4826
|
+
];
|
|
4933
4827
|
|
|
4934
|
-
const
|
|
4935
|
-
return (React.createElement(Card,
|
|
4936
|
-
React.createElement(CardTitle, null, "
|
|
4937
|
-
React.createElement(Input, { title: '
|
|
4938
|
-
const { value } = e.target;
|
|
4939
|
-
handleFormChange('collectorGateway.minReplicas', value === '' ? null : Number(value));
|
|
4940
|
-
} }),
|
|
4941
|
-
React.createElement(Input, { title: 'Max. Replicas', tooltip: 'Maximum number of replicas for the collector gateway', type: 'number', value: formData.collectorGateway?.maxReplicas?.toString() || '', onChange: (e) => {
|
|
4942
|
-
const { value } = e.target;
|
|
4943
|
-
handleFormChange('collectorGateway.maxReplicas', value === '' ? null : Number(value));
|
|
4944
|
-
} }),
|
|
4945
|
-
React.createElement(Input, { title: 'Request Memory (MB)', tooltip: 'Request memory for the collector gateway in Megabytes', type: 'number', value: formData.collectorGateway?.requestMemoryMiB?.toString() || '', onChange: (e) => {
|
|
4828
|
+
const AdvancedSettings = forwardRef(({ formData, handleFormChange }, ref) => {
|
|
4829
|
+
return (React.createElement(Card, { ref: ref, id: SettingsTabs.Advanced },
|
|
4830
|
+
React.createElement(CardTitle, null, "Advanced"),
|
|
4831
|
+
React.createElement(Input, { title: 'UI Pagination Limit', tooltip: 'Pagination limit for fetching data from the UI backend, bigger limit means more data will be fetched at once, and less requests will be made to the backend', type: 'number', required: true, value: formData.uiPaginationLimit?.toString() || '', onChange: (e) => {
|
|
4946
4832
|
const { value } = e.target;
|
|
4947
|
-
handleFormChange('
|
|
4833
|
+
handleFormChange('uiPaginationLimit', value === '' ? null : Number(value));
|
|
4948
4834
|
} }),
|
|
4949
|
-
React.createElement(
|
|
4835
|
+
React.createElement(Dropdown, { title: 'Mount Method', tooltip: 'Method used to mount volume', options: MOUNT_METHOD_OPTIONS, required: true, value: MOUNT_METHOD_OPTIONS.find((option) => option.id === formData.mountMethod) || undefined, onSelect: (option) => handleFormChange('mountMethod', option.id) }),
|
|
4836
|
+
React.createElement(Dropdown, { title: 'Agent Env Vars Injection Method', tooltip: 'How to inject env vars into agents', options: AGENT_ENV_VARS_INJECTION_METHOD_OPTIONS, required: true, value: AGENT_ENV_VARS_INJECTION_METHOD_OPTIONS.find((option) => option.id === formData.agentEnvVarsInjectionMethod) || undefined, onSelect: (option) => handleFormChange('agentEnvVarsInjectionMethod', option.id) }),
|
|
4837
|
+
React.createElement(Input, { title: 'Odiglet Health Probe Bind Port', tooltip: 'Port to bind the health probe', type: 'number', required: true, value: formData.odigletHealthProbeBindPort?.toString() || '', onChange: (e) => {
|
|
4950
4838
|
const { value } = e.target;
|
|
4951
|
-
handleFormChange('
|
|
4839
|
+
handleFormChange('odigletHealthProbeBindPort', value === '' ? null : Number(value));
|
|
4952
4840
|
} }),
|
|
4953
|
-
React.createElement(Input, { title: '
|
|
4841
|
+
React.createElement(Input, { title: 'Custom Container Runtime Socket Path', tooltip: 'Path to the custom container runtime socket', required: true, value: formData.customContainerRuntimeSocketPath || '', onChange: (e) => {
|
|
4954
4842
|
const { value } = e.target;
|
|
4955
|
-
handleFormChange('
|
|
4843
|
+
handleFormChange('customContainerRuntimeSocketPath', value || null);
|
|
4956
4844
|
} }),
|
|
4957
|
-
React.createElement(Input, { title: '
|
|
4845
|
+
React.createElement(Input, { title: 'K8s Node Logs Directory', tooltip: 'Target directory for K8s logs if `/var/log` is a symlink', required: true, value: formData.collectorNode?.k8sNodeLogsDirectory || '', onChange: (e) => {
|
|
4958
4846
|
const { value } = e.target;
|
|
4959
|
-
handleFormChange('
|
|
4847
|
+
handleFormChange('collectorNode.k8sNodeLogsDirectory', value || null);
|
|
4960
4848
|
} }),
|
|
4961
|
-
React.createElement(Input, { title: '
|
|
4849
|
+
React.createElement(Input, { title: 'Coll. Node Own Metrics Port', tooltip: "Port for the collector node's own Prometheus metrics", type: 'number', required: true, value: formData.collectorNode?.collectorOwnMetricsPort?.toString() || '', onChange: (e) => {
|
|
4962
4850
|
const { value } = e.target;
|
|
4963
|
-
handleFormChange('
|
|
4851
|
+
handleFormChange('collectorNode.collectorOwnMetricsPort', value === '' ? null : Number(value));
|
|
4964
4852
|
} }),
|
|
4965
|
-
React.createElement(
|
|
4853
|
+
React.createElement(RowOfFields, null,
|
|
4854
|
+
React.createElement(Input, { title: 'Coll. Node Memory Limiter Limit (MB)', tooltip: 'Memory limiter limit for the collector node in Megabytes', type: 'number', required: true, value: formData.collectorNode?.memoryLimiterLimitMiB?.toString() || '', onChange: (e) => {
|
|
4855
|
+
const { value } = e.target;
|
|
4856
|
+
handleFormChange('collectorNode.memoryLimiterLimitMiB', value === '' ? null : Number(value));
|
|
4857
|
+
} }),
|
|
4858
|
+
React.createElement(Input, { title: 'Coll. Node Memory Limiter Spike Limit (MB)', tooltip: 'Memory limiter spike limit for the collector node in Megabytes', type: 'number', required: true, value: formData.collectorNode?.memoryLimiterSpikeLimitMiB?.toString() || '', onChange: (e) => {
|
|
4859
|
+
const { value } = e.target;
|
|
4860
|
+
handleFormChange('collectorNode.memoryLimiterSpikeLimitMiB', value === '' ? null : Number(value));
|
|
4861
|
+
} })),
|
|
4862
|
+
React.createElement(Input, { title: 'Coll. Node Go Memory Limit (MB)', tooltip: 'Go memory limit for the collector node in Megabytes', type: 'number', required: true, value: formData.collectorNode?.goMemLimitMiB?.toString() || '', onChange: (e) => {
|
|
4966
4863
|
const { value } = e.target;
|
|
4967
|
-
handleFormChange('
|
|
4864
|
+
handleFormChange('collectorNode.goMemLimitMiB', value === '' ? null : Number(value));
|
|
4968
4865
|
} }),
|
|
4969
|
-
React.createElement(
|
|
4866
|
+
React.createElement(RowOfFields, null,
|
|
4867
|
+
React.createElement(Input, { title: 'Coll. Gateway Memory Limiter Limit (MB)', tooltip: 'Memory limiter limit for the collector gateway in Megabytes', type: 'number', required: true, value: formData.collectorGateway?.memoryLimiterLimitMiB?.toString() || '', onChange: (e) => {
|
|
4868
|
+
const { value } = e.target;
|
|
4869
|
+
handleFormChange('collectorGateway.memoryLimiterLimitMiB', value === '' ? null : Number(value));
|
|
4870
|
+
} }),
|
|
4871
|
+
React.createElement(Input, { title: 'Coll. Gateway Memory Limiter Spike Limit (MB)', tooltip: 'Memory limiter spike limit for the collector gateway in Megabytes', type: 'number', required: true, value: formData.collectorGateway?.memoryLimiterSpikeLimitMiB?.toString() || '', onChange: (e) => {
|
|
4872
|
+
const { value } = e.target;
|
|
4873
|
+
handleFormChange('collectorGateway.memoryLimiterSpikeLimitMiB', value === '' ? null : Number(value));
|
|
4874
|
+
} })),
|
|
4875
|
+
React.createElement(Input, { title: 'Coll. Gateway Go Memory Limit (MB)', tooltip: 'Go memory limit for the collector gateway in Megabytes', type: 'number', required: true, value: formData.collectorGateway?.goMemLimitMiB?.toString() || '', onChange: (e) => {
|
|
4970
4876
|
const { value } = e.target;
|
|
4971
4877
|
handleFormChange('collectorGateway.goMemLimitMiB', value === '' ? null : Number(value));
|
|
4972
4878
|
} })));
|
|
4973
|
-
};
|
|
4879
|
+
});
|
|
4880
|
+
AdvancedSettings.displayName = AdvancedSettings.name;
|
|
4974
4881
|
|
|
4975
|
-
const
|
|
4976
|
-
return (React.createElement(Card,
|
|
4977
|
-
React.createElement(CardTitle, null, "
|
|
4978
|
-
|
|
4979
|
-
React.createElement(
|
|
4980
|
-
|
|
4981
|
-
|
|
4982
|
-
|
|
4983
|
-
|
|
4984
|
-
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
};
|
|
4882
|
+
const CollectorNodeSettings = forwardRef(({ formData, handleFormChange }, ref) => {
|
|
4883
|
+
return (React.createElement(Card, { ref: ref, id: SettingsTabs.CollectorNode },
|
|
4884
|
+
React.createElement(CardTitle, null, "Collector Node"),
|
|
4885
|
+
React.createElement(RowOfFields, null,
|
|
4886
|
+
React.createElement(Input, { title: 'Request Memory (MB)', tooltip: 'Request memory for the collector node in Megabytes', type: 'number', required: true, value: formData.collectorNode?.requestMemoryMiB?.toString() || '', onChange: (e) => {
|
|
4887
|
+
const { value } = e.target;
|
|
4888
|
+
handleFormChange('collectorNode.requestMemoryMiB', value === '' ? null : Number(value));
|
|
4889
|
+
} }),
|
|
4890
|
+
React.createElement(Input, { title: 'Limit Memory (MB)', tooltip: 'Limit memory for the collector node in Megabytes', type: 'number', required: true, value: formData.collectorNode?.limitMemoryMiB?.toString() || '', onChange: (e) => {
|
|
4891
|
+
const { value } = e.target;
|
|
4892
|
+
handleFormChange('collectorNode.limitMemoryMiB', value === '' ? null : Number(value));
|
|
4893
|
+
} })),
|
|
4894
|
+
React.createElement(RowOfFields, null,
|
|
4895
|
+
React.createElement(Input, { title: 'Request CPU (m)', tooltip: 'Request CPU for the collector node in Millicores', type: 'number', required: true, value: formData.collectorNode?.requestCPUm?.toString() || '', onChange: (e) => {
|
|
4896
|
+
const { value } = e.target;
|
|
4897
|
+
handleFormChange('collectorNode.requestCPUm', value === '' ? null : Number(value));
|
|
4898
|
+
} }),
|
|
4899
|
+
React.createElement(Input, { title: 'Limit CPU (m)', tooltip: 'Limit CPU for the collector node in Millicores', type: 'number', required: true, value: formData.collectorNode?.limitCPUm?.toString() || '', onChange: (e) => {
|
|
4900
|
+
const { value } = e.target;
|
|
4901
|
+
handleFormChange('collectorNode.limitCPUm', value === '' ? null : Number(value));
|
|
4902
|
+
} }))));
|
|
4903
|
+
});
|
|
4904
|
+
CollectorNodeSettings.displayName = CollectorNodeSettings.name;
|
|
4905
|
+
|
|
4906
|
+
const CollectorGatewaySettings = forwardRef(({ formData, handleFormChange }, ref) => {
|
|
4907
|
+
return (React.createElement(Card, { ref: ref, id: SettingsTabs.CollectorGateway },
|
|
4908
|
+
React.createElement(CardTitle, null, "Collector Gateway"),
|
|
4909
|
+
React.createElement(RowOfFields, null,
|
|
4910
|
+
React.createElement(Input, { title: 'Autoscaler Min. Replicas', tooltip: 'Minimum number of replicas for the collector gateway', type: 'number', required: true, value: formData.collectorGateway?.minReplicas?.toString() || '', onChange: (e) => {
|
|
4911
|
+
const { value } = e.target;
|
|
4912
|
+
handleFormChange('collectorGateway.minReplicas', value === '' ? null : Number(value));
|
|
4913
|
+
} }),
|
|
4914
|
+
React.createElement(Input, { title: 'Autoscaler Max. Replicas', tooltip: 'Maximum number of replicas for the collector gateway', type: 'number', required: true, value: formData.collectorGateway?.maxReplicas?.toString() || '', onChange: (e) => {
|
|
4915
|
+
const { value } = e.target;
|
|
4916
|
+
handleFormChange('collectorGateway.maxReplicas', value === '' ? null : Number(value));
|
|
4917
|
+
} })),
|
|
4918
|
+
React.createElement(RowOfFields, null,
|
|
4919
|
+
React.createElement(Input, { title: 'Request Memory (MB)', tooltip: 'Request memory for the collector gateway in Megabytes', type: 'number', required: true, value: formData.collectorGateway?.requestMemoryMiB?.toString() || '', onChange: (e) => {
|
|
4920
|
+
const { value } = e.target;
|
|
4921
|
+
handleFormChange('collectorGateway.requestMemoryMiB', value === '' ? null : Number(value));
|
|
4922
|
+
} }),
|
|
4923
|
+
React.createElement(Input, { title: 'Limit Memory (MB)', tooltip: 'Limit memory for the collector gateway in Megabytes', type: 'number', required: true, value: formData.collectorGateway?.limitMemoryMiB?.toString() || '', onChange: (e) => {
|
|
4924
|
+
const { value } = e.target;
|
|
4925
|
+
handleFormChange('collectorGateway.limitMemoryMiB', value === '' ? null : Number(value));
|
|
4926
|
+
} })),
|
|
4927
|
+
React.createElement(RowOfFields, null,
|
|
4928
|
+
React.createElement(Input, { title: 'Request CPU (m)', tooltip: 'Request CPU for the collector gateway in Millicores', type: 'number', required: true, value: formData.collectorGateway?.requestCPUm?.toString() || '', onChange: (e) => {
|
|
4929
|
+
const { value } = e.target;
|
|
4930
|
+
handleFormChange('collectorGateway.requestCPUm', value === '' ? null : Number(value));
|
|
4931
|
+
} }),
|
|
4932
|
+
React.createElement(Input, { title: 'Limit CPU (m)', tooltip: 'Limit CPU for the collector gateway in Millicores', type: 'number', required: true, value: formData.collectorGateway?.limitCPUm?.toString() || '', onChange: (e) => {
|
|
4933
|
+
const { value } = e.target;
|
|
4934
|
+
handleFormChange('collectorGateway.limitCPUm', value === '' ? null : Number(value));
|
|
4935
|
+
} }))));
|
|
4936
|
+
});
|
|
4937
|
+
CollectorGatewaySettings.displayName = CollectorGatewaySettings.name;
|
|
4996
4938
|
|
|
4997
4939
|
const DataContainer = styled.div `
|
|
4998
4940
|
display: flex;
|
|
4999
4941
|
flex-direction: column;
|
|
5000
4942
|
gap: 12px;
|
|
4943
|
+
max-height: 100vh;
|
|
4944
|
+
overflow-y: auto;
|
|
5001
4945
|
`;
|
|
5002
4946
|
const DRAWER_WIDTH = '750px';
|
|
5003
4947
|
const TITLE_TEXT = 'System Settings';
|
|
5004
|
-
const SystemSettings = ({ fetchSettings, onSave }) => {
|
|
4948
|
+
const SystemSettings = ({ installationMethod, fetchSettings, onSave }) => {
|
|
5005
4949
|
const [settings, setSettings] = useState(undefined);
|
|
5006
4950
|
const { formData, handleFormChange, resetFormData, isFormDirty } = useGenericForm(settings);
|
|
5007
4951
|
useEffect(() => {
|
|
@@ -5022,12 +4966,100 @@ const SystemSettings = ({ fetchSettings, onSave }) => {
|
|
|
5022
4966
|
callback();
|
|
5023
4967
|
}
|
|
5024
4968
|
};
|
|
4969
|
+
const handleSave = async () => {
|
|
4970
|
+
setIsSaving(true);
|
|
4971
|
+
await onSave(formData);
|
|
4972
|
+
setSettings(await fetchSettings());
|
|
4973
|
+
setIsSaving(false);
|
|
4974
|
+
toggleOpen();
|
|
4975
|
+
};
|
|
4976
|
+
const [selectedTab, setSelectedTab] = useState(SettingsTabs.General);
|
|
4977
|
+
const scrollContainerRef = useRef(null);
|
|
4978
|
+
const generalRef = useRef(null);
|
|
4979
|
+
const uiRef = useRef(null);
|
|
4980
|
+
const rollbackRef = useRef(null);
|
|
4981
|
+
const collectorNodeRef = useRef(null);
|
|
4982
|
+
const collectorGatewayRef = useRef(null);
|
|
4983
|
+
const advancedRef = useRef(null);
|
|
4984
|
+
const refsArray = [generalRef, uiRef, rollbackRef, collectorNodeRef, collectorGatewayRef, advancedRef];
|
|
4985
|
+
const tabsArray = [SettingsTabs.General, SettingsTabs.Ui, SettingsTabs.Rollback, SettingsTabs.CollectorNode, SettingsTabs.CollectorGateway, SettingsTabs.Advanced];
|
|
4986
|
+
const scrollTo = (id) => {
|
|
4987
|
+
const scrollContainer = scrollContainerRef.current;
|
|
4988
|
+
if (!scrollContainer)
|
|
4989
|
+
return;
|
|
4990
|
+
let relativeTop = 0;
|
|
4991
|
+
for (let i = 0; i < refsArray.length; i++) {
|
|
4992
|
+
const curr = refsArray[i].current;
|
|
4993
|
+
if (curr && curr.id === id) {
|
|
4994
|
+
const containerRect = scrollContainer.getBoundingClientRect();
|
|
4995
|
+
const targetRect = curr.getBoundingClientRect();
|
|
4996
|
+
relativeTop = targetRect.top - containerRect.top + scrollContainer.scrollTop - 20; // -20px offset for better visual spacing
|
|
4997
|
+
break;
|
|
4998
|
+
}
|
|
4999
|
+
}
|
|
5000
|
+
scrollContainer.scrollTo({
|
|
5001
|
+
top: id === SettingsTabs.General ? 0 : relativeTop,
|
|
5002
|
+
behavior: 'smooth',
|
|
5003
|
+
});
|
|
5004
|
+
};
|
|
5005
|
+
const onScroll = (e) => {
|
|
5006
|
+
const scrollContainer = scrollContainerRef.current;
|
|
5007
|
+
if (!scrollContainer)
|
|
5008
|
+
return;
|
|
5009
|
+
const scrollTop = e.currentTarget.scrollTop;
|
|
5010
|
+
for (let i = 0; i < refsArray.length; i++) {
|
|
5011
|
+
const curr = refsArray[i].current;
|
|
5012
|
+
if (curr) {
|
|
5013
|
+
const containerRect = scrollContainer.getBoundingClientRect();
|
|
5014
|
+
const targetRect = curr.getBoundingClientRect();
|
|
5015
|
+
const relativeTop = targetRect.top - containerRect.top + scrollContainer.scrollTop;
|
|
5016
|
+
if (relativeTop <= scrollTop)
|
|
5017
|
+
setSelectedTab(tabsArray[i]);
|
|
5018
|
+
}
|
|
5019
|
+
}
|
|
5020
|
+
};
|
|
5021
|
+
const handleTabChange = (tab) => {
|
|
5022
|
+
setSelectedTab(tab);
|
|
5023
|
+
scrollTo(tab);
|
|
5024
|
+
};
|
|
5025
5025
|
return (React.createElement(React.Fragment, null,
|
|
5026
5026
|
React.createElement(IconButton, { key: TITLE_TEXT, onClick: toggleOpen, tooltip: TITLE_TEXT },
|
|
5027
5027
|
React.createElement(GearIcon, { size: 18 })),
|
|
5028
5028
|
React.createElement(Drawer, { width: DRAWER_WIDTH, isOpen: isOpen, onClose: () => handleWithCancelWarning(toggleOpen), header: {
|
|
5029
5029
|
icons: [GearIcon],
|
|
5030
5030
|
title: TITLE_TEXT,
|
|
5031
|
+
tabs: [
|
|
5032
|
+
{
|
|
5033
|
+
label: SettingsTabs.General,
|
|
5034
|
+
onClick: () => handleTabChange(SettingsTabs.General),
|
|
5035
|
+
selected: selectedTab === SettingsTabs.General,
|
|
5036
|
+
},
|
|
5037
|
+
{
|
|
5038
|
+
label: SettingsTabs.Ui,
|
|
5039
|
+
onClick: () => handleTabChange(SettingsTabs.Ui),
|
|
5040
|
+
selected: selectedTab === SettingsTabs.Ui,
|
|
5041
|
+
},
|
|
5042
|
+
{
|
|
5043
|
+
label: SettingsTabs.Rollback,
|
|
5044
|
+
onClick: () => handleTabChange(SettingsTabs.Rollback),
|
|
5045
|
+
selected: selectedTab === SettingsTabs.Rollback,
|
|
5046
|
+
},
|
|
5047
|
+
{
|
|
5048
|
+
label: SettingsTabs.CollectorNode,
|
|
5049
|
+
onClick: () => handleTabChange(SettingsTabs.CollectorNode),
|
|
5050
|
+
selected: selectedTab === SettingsTabs.CollectorNode,
|
|
5051
|
+
},
|
|
5052
|
+
{
|
|
5053
|
+
label: SettingsTabs.CollectorGateway,
|
|
5054
|
+
onClick: () => handleTabChange(SettingsTabs.CollectorGateway),
|
|
5055
|
+
selected: selectedTab === SettingsTabs.CollectorGateway,
|
|
5056
|
+
},
|
|
5057
|
+
{
|
|
5058
|
+
label: SettingsTabs.Advanced,
|
|
5059
|
+
onClick: () => handleTabChange(SettingsTabs.Advanced),
|
|
5060
|
+
selected: selectedTab === SettingsTabs.Advanced,
|
|
5061
|
+
},
|
|
5062
|
+
],
|
|
5031
5063
|
}, footer: {
|
|
5032
5064
|
isOpen: isFormDirty,
|
|
5033
5065
|
centerButtons: [
|
|
@@ -5040,22 +5072,18 @@ const SystemSettings = ({ fetchSettings, onSave }) => {
|
|
|
5040
5072
|
{
|
|
5041
5073
|
'data-id': 'drawer-save',
|
|
5042
5074
|
variant: 'primary',
|
|
5043
|
-
onClick:
|
|
5044
|
-
setIsSaving(true);
|
|
5045
|
-
await onSave(formData);
|
|
5046
|
-
setSettings(await fetchSettings());
|
|
5047
|
-
setIsSaving(false);
|
|
5048
|
-
toggleOpen();
|
|
5049
|
-
},
|
|
5075
|
+
onClick: handleSave,
|
|
5050
5076
|
children: BUTTON_TEXTS.SAVE,
|
|
5051
5077
|
},
|
|
5052
5078
|
],
|
|
5053
|
-
} }, formData?.imagePrefix !== undefined && !isSaving ? (React.createElement(DataContainer,
|
|
5054
|
-
React.createElement(
|
|
5055
|
-
React.createElement(
|
|
5056
|
-
React.createElement(
|
|
5057
|
-
React.createElement(
|
|
5058
|
-
React.createElement(
|
|
5079
|
+
} }, formData?.imagePrefix !== undefined && !isSaving ? (React.createElement(DataContainer, { ref: scrollContainerRef, onScroll: onScroll },
|
|
5080
|
+
installationMethod === InstallationMethod.Helm && React.createElement(NotificationNote, { type: StatusType.Warning, title: 'Helm', message: "Changes won't persist unless you update the `values.yaml` file" }),
|
|
5081
|
+
React.createElement(GeneralSettings, { ref: generalRef, formData: formData, handleFormChange: handleFormChange }),
|
|
5082
|
+
React.createElement(UiSettings, { ref: uiRef, formData: formData, handleFormChange: handleFormChange }),
|
|
5083
|
+
React.createElement(RollbackSettings, { ref: rollbackRef, formData: formData, handleFormChange: handleFormChange }),
|
|
5084
|
+
React.createElement(CollectorNodeSettings, { ref: collectorNodeRef, formData: formData, handleFormChange: handleFormChange }),
|
|
5085
|
+
React.createElement(CollectorGatewaySettings, { ref: collectorGatewayRef, formData: formData, handleFormChange: handleFormChange }),
|
|
5086
|
+
React.createElement(AdvancedSettings, { ref: advancedRef, formData: formData, handleFormChange: handleFormChange }))) : (React.createElement(CenterThis, null,
|
|
5059
5087
|
React.createElement(FadeLoader, { scale: 1.2 })))),
|
|
5060
5088
|
React.createElement(CancelWarning, { isOpen: cancelWarningOpen, name: TITLE_TEXT, onApprove: () => {
|
|
5061
5089
|
cancelApproveCallback?.();
|
|
@@ -34,6 +34,11 @@ export declare enum PlatformType {
|
|
|
34
34
|
K8s = "k8s",
|
|
35
35
|
Vm = "vm"
|
|
36
36
|
}
|
|
37
|
+
export declare enum InstallationMethod {
|
|
38
|
+
Cli = "odigos-cli",
|
|
39
|
+
Helm = "helm",
|
|
40
|
+
Operator = "odigos-operator"
|
|
41
|
+
}
|
|
37
42
|
export declare enum ProgrammingLanguages {
|
|
38
43
|
Go = "go",
|
|
39
44
|
JavaScript = "javascript",
|
|
@@ -1,23 +1,8 @@
|
|
|
1
1
|
import { ProgrammingLanguages } from '..';
|
|
2
|
-
export declare enum UiMode {
|
|
3
|
-
Default = "default",
|
|
4
|
-
ReadOnly = "readonly"
|
|
5
|
-
}
|
|
6
|
-
export declare enum Profile {
|
|
7
|
-
CodeAttributes = "code-attributes",
|
|
8
|
-
FullPayloadCollection = "full-payload-collection",
|
|
9
|
-
DbPayloadCollection = "db-payload-collection",
|
|
10
|
-
QueryOperationDetector = "query-operation-detector",
|
|
11
|
-
AllowConcurrentAgents = "allow_concurrent_agents",
|
|
12
|
-
JavaEbpfInstrumentations = "java-ebpf-instrumentations",
|
|
13
|
-
JavaNativeInstrumentations = "java-native-instrumentations",
|
|
14
|
-
SizeS = "size_s",
|
|
15
|
-
SizeM = "size_m",
|
|
16
|
-
SizeL = "size_l"
|
|
17
|
-
}
|
|
18
2
|
export declare enum MountMethod {
|
|
19
3
|
VirtualDevice = "VirtualDevice",
|
|
20
|
-
HostPath = "HostPath"
|
|
4
|
+
HostPath = "HostPath",
|
|
5
|
+
InitContainer = "InitContainer"
|
|
21
6
|
}
|
|
22
7
|
export declare enum AgentEnvVarsInjectionMethod {
|
|
23
8
|
Loader = "loader",
|
|
@@ -59,13 +44,8 @@ export interface OidcConfiguration {
|
|
|
59
44
|
clientSecret: string;
|
|
60
45
|
}
|
|
61
46
|
export interface OdigosConfig {
|
|
62
|
-
telemetryEnabled: boolean | null;
|
|
63
|
-
openshiftEnabled: boolean | null;
|
|
64
47
|
karpenterEnabled: boolean | null;
|
|
65
|
-
psp: boolean | null;
|
|
66
48
|
allowConcurrentAgents: boolean | null;
|
|
67
|
-
skipWebhookIssuerCreation: boolean | null;
|
|
68
|
-
uiMode: UiMode | null;
|
|
69
49
|
uiPaginationLimit: number | null;
|
|
70
50
|
centralBackendURL: string | null;
|
|
71
51
|
oidc: OidcConfiguration | null;
|
|
@@ -73,7 +53,6 @@ export interface OdigosConfig {
|
|
|
73
53
|
imagePrefix: string | null;
|
|
74
54
|
ignoredNamespaces: string[] | null;
|
|
75
55
|
ignoredContainers: string[] | null;
|
|
76
|
-
profiles: Profile[] | null;
|
|
77
56
|
mountMethod: MountMethod | null;
|
|
78
57
|
agentEnvVarsInjectionMethod: AgentEnvVarsInjectionMethod | null;
|
|
79
58
|
customContainerRuntimeSocketPath: string | null;
|
|
@@ -85,5 +64,4 @@ export interface OdigosConfig {
|
|
|
85
64
|
rollout: RolloutConfiguration | null;
|
|
86
65
|
collectorNode: CollectorNode | null;
|
|
87
66
|
collectorGateway: CollectorGateway | null;
|
|
88
|
-
userInstrumentationEnvs: UserInstrumentationEnvs | null;
|
|
89
67
|
}
|
package/lib/types.js
CHANGED
|
@@ -91,6 +91,12 @@ var PlatformType;
|
|
|
91
91
|
PlatformType["K8s"] = "k8s";
|
|
92
92
|
PlatformType["Vm"] = "vm";
|
|
93
93
|
})(PlatformType || (PlatformType = {}));
|
|
94
|
+
var InstallationMethod;
|
|
95
|
+
(function (InstallationMethod) {
|
|
96
|
+
InstallationMethod["Cli"] = "odigos-cli";
|
|
97
|
+
InstallationMethod["Helm"] = "helm";
|
|
98
|
+
InstallationMethod["Operator"] = "odigos-operator";
|
|
99
|
+
})(InstallationMethod || (InstallationMethod = {}));
|
|
94
100
|
var ProgrammingLanguages;
|
|
95
101
|
(function (ProgrammingLanguages) {
|
|
96
102
|
ProgrammingLanguages["Go"] = "go";
|
|
@@ -178,40 +184,11 @@ var SortDirection;
|
|
|
178
184
|
SortDirection["Descending"] = "desc";
|
|
179
185
|
})(SortDirection || (SortDirection = {}));
|
|
180
186
|
|
|
181
|
-
var UiMode;
|
|
182
|
-
(function (UiMode) {
|
|
183
|
-
UiMode["Default"] = "default";
|
|
184
|
-
UiMode["ReadOnly"] = "readonly";
|
|
185
|
-
})(UiMode || (UiMode = {}));
|
|
186
|
-
var Profile;
|
|
187
|
-
(function (Profile) {
|
|
188
|
-
// CategoryAttributes = 'category-attributes',
|
|
189
|
-
Profile["CodeAttributes"] = "code-attributes";
|
|
190
|
-
// CopyScope = 'copy-scope',
|
|
191
|
-
// HostnameAsPodname = 'hostname-as-podname',
|
|
192
|
-
Profile["FullPayloadCollection"] = "full-payload-collection";
|
|
193
|
-
Profile["DbPayloadCollection"] = "db-payload-collection";
|
|
194
|
-
Profile["QueryOperationDetector"] = "query-operation-detector";
|
|
195
|
-
// Semconv = 'semconv',
|
|
196
|
-
// ReduceSpanNameCardinality = 'reduce-span-name-cardinality',
|
|
197
|
-
Profile["AllowConcurrentAgents"] = "allow_concurrent_agents";
|
|
198
|
-
Profile["JavaEbpfInstrumentations"] = "java-ebpf-instrumentations";
|
|
199
|
-
Profile["JavaNativeInstrumentations"] = "java-native-instrumentations";
|
|
200
|
-
// LegacyDotnetInstrumentation = 'legacy-dotnet-instrumentation',
|
|
201
|
-
// MountMethodK8sHostPath = 'mount-method-k8s-host-path',
|
|
202
|
-
// MountMethodK8sVirtualDevice = 'mount-method-k8s-virtual-device',
|
|
203
|
-
// PodManifestEnvVarInjection = 'pod-manifest-env-var-injection',
|
|
204
|
-
// DisableGin = 'disable-gin',
|
|
205
|
-
// SmallBatches = 'small-batches',
|
|
206
|
-
Profile["SizeS"] = "size_s";
|
|
207
|
-
Profile["SizeM"] = "size_m";
|
|
208
|
-
Profile["SizeL"] = "size_l";
|
|
209
|
-
})(Profile || (Profile = {}));
|
|
210
187
|
var MountMethod;
|
|
211
188
|
(function (MountMethod) {
|
|
212
189
|
MountMethod["VirtualDevice"] = "VirtualDevice";
|
|
213
190
|
MountMethod["HostPath"] = "HostPath";
|
|
214
|
-
|
|
191
|
+
MountMethod["InitContainer"] = "InitContainer";
|
|
215
192
|
})(MountMethod || (MountMethod = {}));
|
|
216
193
|
var AgentEnvVarsInjectionMethod;
|
|
217
194
|
(function (AgentEnvVarsInjectionMethod) {
|
|
@@ -363,4 +340,4 @@ var K8sResourceKind;
|
|
|
363
340
|
K8sResourceKind["CronJob"] = "CronJob";
|
|
364
341
|
})(K8sResourceKind || (K8sResourceKind = {}));
|
|
365
342
|
|
|
366
|
-
export { ActionCategory, ActionKeyTypes, ActionType, AddNodeTypes, AgentEnvVarsInjectionMethod, BooleanOperation, CodeAttributesKeyTypes, Crud, CustomInstrumentationsKeyTypes, DestinationTypes, EdgeTypes, EntityTypes, FieldTypes, HeadersCollectionKeyTypes, InputTypes, InstrumentationRuleType, IntrumentationStatus, JsonOperation, K8sResourceKind, MountMethod, NodeTypes, NumberOperation, OtherEntityTypes, OtherStatus, PayloadCollectionKeyTypes, PlatformType,
|
|
343
|
+
export { ActionCategory, ActionKeyTypes, ActionType, AddNodeTypes, AgentEnvVarsInjectionMethod, BooleanOperation, CodeAttributesKeyTypes, Crud, CustomInstrumentationsKeyTypes, DestinationTypes, EdgeTypes, EntityTypes, FieldTypes, HeadersCollectionKeyTypes, InputTypes, InstallationMethod, InstrumentationRuleType, IntrumentationStatus, JsonOperation, K8sResourceKind, MountMethod, NodeTypes, NumberOperation, OtherEntityTypes, OtherStatus, PayloadCollectionKeyTypes, PlatformType, ProgrammingLanguages, SignalType, SortDirection, StatusType, StringOperation, Tier };
|
package/package.json
CHANGED