add usage events for eice discover (#32617)

This commit is contained in:
Yassine Bounekhla 2023-09-29 17:13:58 -04:00 committed by GitHub
parent ca27ce9166
commit 33cfd9dc5f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 4335 additions and 1433 deletions

File diff suppressed because it is too large Load diff

View file

@ -137,6 +137,8 @@ enum DiscoverResource {
DISCOVER_RESOURCE_DOC_DATABASE_DYNAMIC_REGISTRATION = 36;
DISCOVER_RESOURCE_SAML_APPLICATION = 37;
DISCOVER_RESOURCE_EC2_INSTANCE = 38;
}
// DiscoverResourceMetadata contains common metadata identifying resource type being added.
@ -301,6 +303,27 @@ message UIDiscoverAutoDiscoveredResourcesEvent {
int64 resources_count = 4;
}
// UIDiscoverEC2InstanceSelectionEvent is emitted when the user is finished with the step that asks the user to select an EC2 Instance to enroll.
message UIDiscoverEC2InstanceSelectionEvent {
DiscoverMetadata metadata = 1;
DiscoverResourceMetadata resource = 2;
DiscoverStepStatus status = 3;
}
// UIDiscoverDeployEICEEvent is emitted when the user deploys an EC2 Instance Connect Endpoint.
message UIDiscoverDeployEICEEvent {
DiscoverMetadata metadata = 1;
DiscoverResourceMetadata resource = 2;
DiscoverStepStatus status = 3;
}
// UIDiscoverCreateNodeEvent is emitted when the node is created in Teleport.
message UIDiscoverCreateNodeEvent {
DiscoverMetadata metadata = 1;
DiscoverResourceMetadata resource = 2;
DiscoverStepStatus status = 3;
}
// UIDiscoverDatabaseConfigureIAMPolicyEvent is emitted when a user is finished with the step that configures IAM policy for an RDS database.
message UIDiscoverDatabaseConfigureIAMPolicyEvent {
DiscoverMetadata metadata = 1;
@ -602,6 +625,9 @@ message UsageEventOneOf {
AccessListMemberUpdate access_list_member_update = 44;
AccessListMemberDelete access_list_member_delete = 45;
AccessListGrantsToUser access_list_grants_to_user = 46;
UIDiscoverEC2InstanceSelectionEvent ui_discover_ec2_instance_selection = 47;
UIDiscoverDeployEICEEvent ui_discover_deploy_eice = 48;
UIDiscoverCreateNodeEvent ui_discover_create_node = 49;
}
reserved 2; //UIOnboardGetStartedClickEvent
reserved "ui_onboard_get_started_click";

File diff suppressed because it is too large Load diff

View file

@ -958,6 +958,120 @@ export namespace UIDiscoverAutoDiscoveredResourcesEvent {
}
}
export class UIDiscoverEC2InstanceSelectionEvent extends jspb.Message {
hasMetadata(): boolean;
clearMetadata(): void;
getMetadata(): DiscoverMetadata | undefined;
setMetadata(value?: DiscoverMetadata): UIDiscoverEC2InstanceSelectionEvent;
hasResource(): boolean;
clearResource(): void;
getResource(): DiscoverResourceMetadata | undefined;
setResource(value?: DiscoverResourceMetadata): UIDiscoverEC2InstanceSelectionEvent;
hasStatus(): boolean;
clearStatus(): void;
getStatus(): DiscoverStepStatus | undefined;
setStatus(value?: DiscoverStepStatus): UIDiscoverEC2InstanceSelectionEvent;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UIDiscoverEC2InstanceSelectionEvent.AsObject;
static toObject(includeInstance: boolean, msg: UIDiscoverEC2InstanceSelectionEvent): UIDiscoverEC2InstanceSelectionEvent.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: UIDiscoverEC2InstanceSelectionEvent, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): UIDiscoverEC2InstanceSelectionEvent;
static deserializeBinaryFromReader(message: UIDiscoverEC2InstanceSelectionEvent, reader: jspb.BinaryReader): UIDiscoverEC2InstanceSelectionEvent;
}
export namespace UIDiscoverEC2InstanceSelectionEvent {
export type AsObject = {
metadata?: DiscoverMetadata.AsObject,
resource?: DiscoverResourceMetadata.AsObject,
status?: DiscoverStepStatus.AsObject,
}
}
export class UIDiscoverDeployEICEEvent extends jspb.Message {
hasMetadata(): boolean;
clearMetadata(): void;
getMetadata(): DiscoverMetadata | undefined;
setMetadata(value?: DiscoverMetadata): UIDiscoverDeployEICEEvent;
hasResource(): boolean;
clearResource(): void;
getResource(): DiscoverResourceMetadata | undefined;
setResource(value?: DiscoverResourceMetadata): UIDiscoverDeployEICEEvent;
hasStatus(): boolean;
clearStatus(): void;
getStatus(): DiscoverStepStatus | undefined;
setStatus(value?: DiscoverStepStatus): UIDiscoverDeployEICEEvent;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UIDiscoverDeployEICEEvent.AsObject;
static toObject(includeInstance: boolean, msg: UIDiscoverDeployEICEEvent): UIDiscoverDeployEICEEvent.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: UIDiscoverDeployEICEEvent, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): UIDiscoverDeployEICEEvent;
static deserializeBinaryFromReader(message: UIDiscoverDeployEICEEvent, reader: jspb.BinaryReader): UIDiscoverDeployEICEEvent;
}
export namespace UIDiscoverDeployEICEEvent {
export type AsObject = {
metadata?: DiscoverMetadata.AsObject,
resource?: DiscoverResourceMetadata.AsObject,
status?: DiscoverStepStatus.AsObject,
}
}
export class UIDiscoverCreateNodeEvent extends jspb.Message {
hasMetadata(): boolean;
clearMetadata(): void;
getMetadata(): DiscoverMetadata | undefined;
setMetadata(value?: DiscoverMetadata): UIDiscoverCreateNodeEvent;
hasResource(): boolean;
clearResource(): void;
getResource(): DiscoverResourceMetadata | undefined;
setResource(value?: DiscoverResourceMetadata): UIDiscoverCreateNodeEvent;
hasStatus(): boolean;
clearStatus(): void;
getStatus(): DiscoverStepStatus | undefined;
setStatus(value?: DiscoverStepStatus): UIDiscoverCreateNodeEvent;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UIDiscoverCreateNodeEvent.AsObject;
static toObject(includeInstance: boolean, msg: UIDiscoverCreateNodeEvent): UIDiscoverCreateNodeEvent.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: UIDiscoverCreateNodeEvent, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): UIDiscoverCreateNodeEvent;
static deserializeBinaryFromReader(message: UIDiscoverCreateNodeEvent, reader: jspb.BinaryReader): UIDiscoverCreateNodeEvent;
}
export namespace UIDiscoverCreateNodeEvent {
export type AsObject = {
metadata?: DiscoverMetadata.AsObject,
resource?: DiscoverResourceMetadata.AsObject,
status?: DiscoverStepStatus.AsObject,
}
}
export class UIDiscoverDatabaseConfigureIAMPolicyEvent extends jspb.Message {
hasMetadata(): boolean;
@ -2415,6 +2529,24 @@ export class SubmitEventRequest extends jspb.Message {
setAccessListGrantsToUser(value?: AccessListGrantsToUserEvent): SubmitEventRequest;
hasUiDiscoverEc2InstanceSelection(): boolean;
clearUiDiscoverEc2InstanceSelection(): void;
getUiDiscoverEc2InstanceSelection(): UIDiscoverEC2InstanceSelectionEvent | undefined;
setUiDiscoverEc2InstanceSelection(value?: UIDiscoverEC2InstanceSelectionEvent): SubmitEventRequest;
hasUiDiscoverDeployEice(): boolean;
clearUiDiscoverDeployEice(): void;
getUiDiscoverDeployEice(): UIDiscoverDeployEICEEvent | undefined;
setUiDiscoverDeployEice(value?: UIDiscoverDeployEICEEvent): SubmitEventRequest;
hasUiDiscoverCreateNode(): boolean;
clearUiDiscoverCreateNode(): void;
getUiDiscoverCreateNode(): UIDiscoverCreateNodeEvent | undefined;
setUiDiscoverCreateNode(value?: UIDiscoverCreateNodeEvent): SubmitEventRequest;
getEventCase(): SubmitEventRequest.EventCase;
serializeBinary(): Uint8Array;
@ -2492,6 +2624,9 @@ export namespace SubmitEventRequest {
accessListMemberUpdate?: AccessListMemberUpdateEvent.AsObject,
accessListMemberDelete?: AccessListMemberDeleteEvent.AsObject,
accessListGrantsToUser?: AccessListGrantsToUserEvent.AsObject,
uiDiscoverEc2InstanceSelection?: UIDiscoverEC2InstanceSelectionEvent.AsObject,
uiDiscoverDeployEice?: UIDiscoverDeployEICEEvent.AsObject,
uiDiscoverCreateNode?: UIDiscoverCreateNodeEvent.AsObject,
}
export enum EventCase {
@ -2619,6 +2754,12 @@ export namespace SubmitEventRequest {
ACCESS_LIST_GRANTS_TO_USER = 64,
UI_DISCOVER_EC2_INSTANCE_SELECTION = 65,
UI_DISCOVER_DEPLOY_EICE = 66,
UI_DISCOVER_CREATE_NODE = 67,
}
}
@ -2764,6 +2905,7 @@ export enum DiscoverResource {
DISCOVER_RESOURCE_DOC_DATABASE_HIGH_AVAILABILITY = 35,
DISCOVER_RESOURCE_DOC_DATABASE_DYNAMIC_REGISTRATION = 36,
DISCOVER_RESOURCE_SAML_APPLICATION = 37,
DISCOVER_RESOURCE_EC2_INSTANCE = 38,
}
export enum DiscoverStatus {

File diff suppressed because it is too large Load diff

View file

@ -1038,6 +1038,39 @@ func ConvertUsageEvent(event *usageeventsv1.UsageEventOneOf, userMD UserMetadata
return nil, trace.Wrap(err)
}
return ret, nil
case *usageeventsv1.UsageEventOneOf_UiDiscoverEc2InstanceSelection:
ret := &UIDiscoverEC2InstanceSelectionEvent{
Metadata: discoverMetadataToPrehog(e.UiDiscoverEc2InstanceSelection.Metadata, userMD),
Resource: discoverResourceToPrehog(e.UiDiscoverEc2InstanceSelection.Resource),
Status: discoverStatusToPrehog(e.UiDiscoverEc2InstanceSelection.Status),
}
if err := ret.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
return ret, nil
case *usageeventsv1.UsageEventOneOf_UiDiscoverDeployEice:
ret := &UIDiscoverAutoDiscoveredResourcesEvent{
Metadata: discoverMetadataToPrehog(e.UiDiscoverDeployEice.Metadata, userMD),
Resource: discoverResourceToPrehog(e.UiDiscoverDeployEice.Resource),
Status: discoverStatusToPrehog(e.UiDiscoverDeployEice.Status),
}
if err := ret.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
return ret, nil
case *usageeventsv1.UsageEventOneOf_UiDiscoverCreateNode:
ret := &UIDiscoverAutoDiscoveredResourcesEvent{
Metadata: discoverMetadataToPrehog(e.UiDiscoverCreateNode.Metadata, userMD),
Resource: discoverResourceToPrehog(e.UiDiscoverCreateNode.Resource),
Status: discoverStatusToPrehog(e.UiDiscoverCreateNode.Status),
}
if err := ret.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
return ret, nil
case *usageeventsv1.UsageEventOneOf_UiDiscoverDatabaseConfigureIamPolicyEvent:
ret := &UIDiscoverDatabaseConfigureIAMPolicyEvent{

View file

@ -352,6 +352,72 @@ func (u *UIDiscoverAutoDiscoveredResourcesEvent) Anonymize(a utils.Anonymizer) p
}
}
// UIDiscoverEC2InstanceSelectionEvent is emitted when the user is finished with the step that asks the user to select an EC2 Instance to enroll.
type UIDiscoverEC2InstanceSelectionEvent prehogv1a.UIDiscoverEC2InstanceSelectionEvent
func (u *UIDiscoverEC2InstanceSelectionEvent) CheckAndSetDefaults() error {
return trace.Wrap(validateDiscoverBaseEventFields(u.Metadata, u.Resource, u.Status))
}
func (u *UIDiscoverEC2InstanceSelectionEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest {
return prehogv1a.SubmitEventRequest{
Event: &prehogv1a.SubmitEventRequest_UiDiscoverEc2InstanceSelection{
UiDiscoverEc2InstanceSelection: &prehogv1a.UIDiscoverEC2InstanceSelectionEvent{
Metadata: &prehogv1a.DiscoverMetadata{
Id: u.Metadata.Id,
UserName: a.AnonymizeString(u.Metadata.UserName),
},
Resource: u.Resource,
Status: u.Status,
},
},
}
}
// UIDiscoverDeployEICEEvent is emitted when the user deploys an EC2 Instance Connect Endpoint.
type UIDiscoverDeployEICEEvent prehogv1a.UIDiscoverDeployEICEEvent
func (u *UIDiscoverDeployEICEEvent) CheckAndSetDefaults() error {
return trace.Wrap(validateDiscoverBaseEventFields(u.Metadata, u.Resource, u.Status))
}
func (u *UIDiscoverDeployEICEEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest {
return prehogv1a.SubmitEventRequest{
Event: &prehogv1a.SubmitEventRequest_UiDiscoverDeployEice{
UiDiscoverDeployEice: &prehogv1a.UIDiscoverDeployEICEEvent{
Metadata: &prehogv1a.DiscoverMetadata{
Id: u.Metadata.Id,
UserName: a.AnonymizeString(u.Metadata.UserName),
},
Resource: u.Resource,
Status: u.Status,
},
},
}
}
// UIDiscoverCreateNodeEvent is emitted when the node is created in Teleport.
type UIDiscoverCreateNodeEvent prehogv1a.UIDiscoverDeployEICEEvent
func (u *UIDiscoverCreateNodeEvent) CheckAndSetDefaults() error {
return trace.Wrap(validateDiscoverBaseEventFields(u.Metadata, u.Resource, u.Status))
}
func (u *UIDiscoverCreateNodeEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest {
return prehogv1a.SubmitEventRequest{
Event: &prehogv1a.SubmitEventRequest_UiDiscoverCreateNode{
UiDiscoverCreateNode: &prehogv1a.UIDiscoverCreateNodeEvent{
Metadata: &prehogv1a.DiscoverMetadata{
Id: u.Metadata.Id,
UserName: a.AnonymizeString(u.Metadata.UserName),
},
Resource: u.Resource,
Status: u.Status,
},
},
}
}
// UIDiscoverDatabaseConfigureIAMPolicyEvent is emitted when a user configured IAM for RDS database
// and proceeded to the next step.
type UIDiscoverDatabaseConfigureIAMPolicyEvent prehogv1a.UIDiscoverDatabaseConfigureIAMPolicyEvent

View file

@ -55,6 +55,9 @@ const (
uiDiscoverDesktopActiveDirectoryToolsInstallEvent = "tp.ui.discover.desktop.activeDirectory.tools.install"
uiDiscoverDesktopActiveDirectoryConfigureEvent = "tp.ui.discover.desktop.activeDirectory.configure"
uiDiscoverAutoDiscoveredResourcesEvent = "tp.ui.discover.autoDiscoveredResources"
uiDiscoverEC2InstanceSelectionEvent = "tp.ui.discover.selectedEC2Instance"
uiDiscoverDeployEICEEvent = "tp.ui.discover.deployEICE"
uiDiscoverCreateNodeEvent = "tp.ui.discover.createNode"
uiDiscoverPrincipalsConfigureEvent = "tp.ui.discover.principals.configure"
uiDiscoverTestConnectionEvent = "tp.ui.discover.testConnection"
uiDiscoverCompletedEvent = "tp.ui.discover.completed"
@ -288,6 +291,9 @@ func ConvertUserEventRequestToUsageEvent(req CreateUserEventRequest) (*usageeven
uiDiscoverAutoDiscoveredResourcesEvent,
uiDiscoverPrincipalsConfigureEvent,
uiDiscoverTestConnectionEvent,
uiDiscoverEC2InstanceSelectionEvent,
uiDiscoverDeployEICEEvent,
uiDiscoverCreateNodeEvent,
uiDiscoverCompletedEvent:
var discoverEvent DiscoverEventData

View file

@ -190,6 +190,33 @@ func (d *DiscoverEventData) ToUsageEvent(eventName string) (*usageeventsv1.Usage
},
}}, nil
case uiDiscoverEC2InstanceSelectionEvent:
return &usageeventsv1.UsageEventOneOf{Event: &usageeventsv1.UsageEventOneOf_UiDiscoverEc2InstanceSelection{
UiDiscoverEc2InstanceSelection: &usageeventsv1.UIDiscoverEC2InstanceSelectionEvent{
Metadata: metadata,
Resource: resource,
Status: status,
},
}}, nil
case uiDiscoverDeployEICEEvent:
return &usageeventsv1.UsageEventOneOf{Event: &usageeventsv1.UsageEventOneOf_UiDiscoverDeployEice{
UiDiscoverDeployEice: &usageeventsv1.UIDiscoverDeployEICEEvent{
Metadata: metadata,
Resource: resource,
Status: status,
},
}}, nil
case uiDiscoverCreateNodeEvent:
return &usageeventsv1.UsageEventOneOf{Event: &usageeventsv1.UsageEventOneOf_UiDiscoverCreateNode{
UiDiscoverCreateNode: &usageeventsv1.UIDiscoverCreateNodeEvent{
Metadata: metadata,
Resource: resource,
Status: status,
},
}}, nil
case uiDiscoverDatabaseConfigureIAMPolicyEvent:
return &usageeventsv1.UsageEventOneOf{Event: &usageeventsv1.UsageEventOneOf_UiDiscoverDatabaseConfigureIamPolicyEvent{
UiDiscoverDatabaseConfigureIamPolicyEvent: &usageeventsv1.UIDiscoverDatabaseConfigureIAMPolicyEvent{

View file

@ -332,6 +332,8 @@ enum DiscoverResource {
DISCOVER_RESOURCE_DOC_DATABASE_DYNAMIC_REGISTRATION = 36;
DISCOVER_RESOURCE_SAML_APPLICATION = 37;
DISCOVER_RESOURCE_EC2_INSTANCE = 38;
}
// DiscoverResourceMetadata contains common metadata identifying resource type being added.
@ -476,6 +478,27 @@ message UIDiscoverAutoDiscoveredResourcesEvent {
int64 resources_count = 4;
}
// UIDiscoverEC2InstanceSelectionEvent is emitted when the user is finished with the step that asks the user to select an EC2 Instance to enroll.
message UIDiscoverEC2InstanceSelectionEvent {
DiscoverMetadata metadata = 1;
DiscoverResourceMetadata resource = 2;
DiscoverStepStatus status = 3;
}
// UIDiscoverDeployEICEEvent is emitted when the user deploys an EC2 Instance Connect Endpoint.
message UIDiscoverDeployEICEEvent {
DiscoverMetadata metadata = 1;
DiscoverResourceMetadata resource = 2;
DiscoverStepStatus status = 3;
}
// UIDiscoverCreateNodeEvent is emitted when the node is created in Teleport.
message UIDiscoverCreateNodeEvent {
DiscoverMetadata metadata = 1;
DiscoverResourceMetadata resource = 2;
DiscoverStepStatus status = 3;
}
// UIDiscoverDatabaseConfigureIAMPolicyEvent is emitted when a user is finished with the step that configures IAM policy for an RDS database.
message UIDiscoverDatabaseConfigureIAMPolicyEvent {
DiscoverMetadata metadata = 1;
@ -1028,6 +1051,9 @@ message SubmitEventRequest {
AccessListMemberUpdateEvent access_list_member_update = 62;
AccessListMemberDeleteEvent access_list_member_delete = 63;
AccessListGrantsToUserEvent access_list_grants_to_user = 64;
UIDiscoverEC2InstanceSelectionEvent ui_discover_ec2_instance_selection = 65;
UIDiscoverDeployEICEEvent ui_discover_deploy_eice = 66;
UIDiscoverCreateNodeEvent ui_discover_create_node = 67;
}
reserved 8; // UIOnboardGetStartedClickEvent

View file

@ -82,7 +82,7 @@ export const SERVERS: ResourceSpec[] = [
keywords:
baseServerKeywords + 'ec2 instance connect endpoint aws amazon eice',
icon: 'Aws',
event: null, // TODO rudream (ADD EVENTS FOR EICE FLOW)
event: DiscoverEventResource.Ec2Instance,
nodeMeta: { location: ServerLocation.Aws },
},
];

View file

@ -27,6 +27,10 @@ import {
SecurityGroup,
integrationService,
} from 'teleport/services/integrations';
import {
DiscoverEvent,
DiscoverEventStatus,
} from 'teleport/services/userEvent';
import { NodeMeta, useDiscover } from 'teleport/Discover/useDiscover';
import {
ActionButtons,
@ -78,7 +82,8 @@ export function CreateEc2Ice() {
const { attempt: deployEc2IceAttempt, setAttempt: setDeployEc2IceAttempt } =
useAttempt('');
const { emitErrorEvent, agentMeta, prevStep, nextStep } = useDiscover();
const { emitErrorEvent, agentMeta, prevStep, nextStep, emitEvent } =
useDiscover();
async function fetchSecurityGroups() {
const integration = (agentMeta as NodeMeta).integration;
@ -122,13 +127,22 @@ export function CreateEc2Ice() {
}
);
// Capture event for deploying EICE.
// emitEvent(null); TODO rudream (ADD EVENTS FOR EICE FLOW)
emitEvent(
{ stepStatus: DiscoverEventStatus.Success },
{
eventName: DiscoverEvent.EC2DeployEICE,
}
);
} catch (err) {
const errMsg = getErrMessage(err);
setShowCreatingDialog(false);
setDeployEc2IceAttempt({ status: 'failed', statusText: errMsg });
emitErrorEvent(
`ec2 instance connect endpoint deploying failed: ${errMsg}`
// Capture error event for failing to deploy EICE.
emitEvent(
{ stepStatus: DiscoverEventStatus.Error, stepStatusError: errMsg },
{
eventName: DiscoverEvent.EC2DeployEICE,
}
);
}
}

View file

@ -40,6 +40,10 @@ import NodeService from 'teleport/services/nodes';
import { TextIcon } from 'teleport/Discover/Shared';
import { NodeMeta, useDiscover } from 'teleport/Discover/useDiscover';
import { usePoll } from 'teleport/Discover/Shared/usePoll';
import {
DiscoverEvent,
DiscoverEventStatus,
} from 'teleport/services/userEvent';
export function CreateEc2IceDialog({
nextStep,
@ -55,7 +59,8 @@ export function CreateEc2IceDialog({
existingEice?.state !== 'create-complete'
);
const { emitErrorEvent, updateAgentMeta, agentMeta } = useDiscover();
const { emitErrorEvent, updateAgentMeta, agentMeta, emitEvent } =
useDiscover();
const typedAgentMeta = agentMeta as NodeMeta;
const nodeService = new NodeService();
@ -156,6 +161,14 @@ export function CreateEc2IceDialog({
resourceName: node.id,
});
setCreateNodeAttempt({ status: 'success' });
// Capture event for creating the Node.
emitEvent(
{ stepStatus: DiscoverEventStatus.Success },
{
eventName: DiscoverEvent.CreateNode,
}
);
} catch (err) {
const errMsg = getErrMessage(err);
setCreateNodeAttempt({ status: 'failed', statusText: errMsg });

View file

@ -31,6 +31,11 @@ import {
import { AwsRegionSelector } from 'teleport/Discover/Shared/AwsRegionSelector';
import NodeService, { Node } from 'teleport/services/nodes';
import {
DiscoverEvent,
DiscoverEventStatus,
} from 'teleport/services/userEvent';
import { ActionButtons, Header } from '../../Shared';
import { CreateEc2IceDialog } from '../CreateEc2Ice/CreateEc2IceDialog';
@ -57,7 +62,7 @@ const emptyTableData: TableData = {
};
export function EnrollEc2Instance() {
const { agentMeta, emitErrorEvent, nextStep, updateAgentMeta } =
const { agentMeta, emitErrorEvent, nextStep, updateAgentMeta, emitEvent } =
useDiscover();
const nodeService = new NodeService();
@ -214,6 +219,13 @@ export function EnrollEc2Instance() {
// it's create-complete and then create the node.
if (createCompleteEice || createInProgressEice) {
setExistingEice(createCompleteEice || createInProgressEice);
// Since the EICE had already been deployed before the flow, emit an event for EC2DeployEICE as `Skipped`.
emitEvent(
{ stepStatus: DiscoverEventStatus.Skipped },
{
eventName: DiscoverEvent.EC2DeployEICE,
}
);
updateAgentMeta({
...(agentMeta as NodeMeta),
node: selectedInstance,

View file

@ -59,12 +59,13 @@ export const ServerResource: ResourceViewConfig<ResourceSpec> = {
{
title: 'Enroll EC2 Instance',
component: EnrollEc2Instance,
// eventName: null, TODO rudream (ADD EVENTS FOR EICE FLOW)
eventName: DiscoverEvent.EC2InstanceSelection,
},
{
title: 'Create EC2 Instance Connect Endpoint',
component: CreateEc2Ice,
// eventName: null, TODO rudream (ADD EVENTS FOR EICE FLOW)
eventName: DiscoverEvent.CreateNode,
manuallyEmitSuccessEvent: true,
},
];
} else {

View file

@ -81,6 +81,9 @@ export enum DiscoverEvent {
DesktopActiveDirectoryToolsInstall = 'tp.ui.discover.desktop.activeDirectory.tools.install',
DesktopActiveDirectoryConfigure = 'tp.ui.discover.desktop.activeDirectory.configure',
AutoDiscoveredResources = 'tp.ui.discover.autoDiscoveredResources',
EC2InstanceSelection = 'tp.ui.discover.selectedEC2Instance',
EC2DeployEICE = 'tp.ui.discover.deployEICE',
CreateNode = 'tp.ui.discover.createNode',
PrincipalsConfigure = 'tp.ui.discover.principals.configure',
TestConnection = 'tp.ui.discover.testConnection',
Completed = 'tp.ui.discover.completed',
@ -132,6 +135,8 @@ export enum DiscoverEventResource {
ApplicationTcp = 'DISCOVER_RESOURCE_APPLICATION_TCP',
WindowsDesktop = 'DISCOVER_RESOURCE_WINDOWS_DESKTOP',
Ec2Instance = 'DISCOVER_RESOURCE_EC2_INSTANCE',
SamlApplication = 'DISCOVER_RESOURCE_SAML_APPLICATION',
}