Skip to content
This repository was archived by the owner on Feb 8, 2024. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/teleterm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ lib/teleterm/api/protogen/
```sh
$ cd webapps
$ rm -rf ./packages/teleterm/src/services/tshd/v1/ && cp -R ../teleport/lib/teleterm/api/protogen/js/v1 ./packages/teleterm/src/services/tshd/v1
$ rm -rf ./packages/teleterm/src/services/tshd/prehog && cp -R ../teleport/lib/prehog/gen-js/prehog ./packages/teleterm/src/services/tshd/prehog
```

### Generating shared process gRPC protobuf files
Expand Down
171 changes: 90 additions & 81 deletions packages/teleterm/src/services/tshd/mapUsageEvent.ts
Original file line number Diff line number Diff line change
@@ -1,99 +1,108 @@
import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb';

import {
AccessRequestAssumeRoleEvent,
AccessRequestCreateEvent,
AccessRequestReviewEvent,
ClusterProperties,
ProtocolRunEvent,
ConnectUsageEventOneOf,
LoginEvent,
FileTransferRunEvent,
ReportEventRequest,
UserJobRoleUpdateEvent,
} from 'teleterm/services/tshd/v1/usage_events_pb';
import * as api from 'teleterm/services/tshd/v1/usage_events_pb';
import * as prehogApi from 'teleterm/services/tshd/prehog/v1alpha/connect_pb';

import * as types from './types';

export function mapUsageEvent(event: types.ReportEventRequest) {
return new ReportEventRequest()
.setDistinctId(event.distinctId)
.setTimestamp(Timestamp.fromDate(event.timestamp))
.setEvent(mapEventBody(event.event));
export function mapUsageEvent(
req: types.ReportEventRequest
): api.ReportEventRequest {
const apiReq = new api.ReportEventRequest()
.setAuthClusterId(req.authClusterId)
.setDistinctId(req.distinctId)
.setTimestamp(Timestamp.fromDate(req.timestamp));

setEvent(apiReq, req);

return apiReq;
}

function mapEventBody(
event: ConnectUsageEventOneOf.AsObject
): ConnectUsageEventOneOf {
if (event.loginEvent) {
const { loginEvent } = event;
return new ConnectUsageEventOneOf().setLoginEvent(
new LoginEvent()
.setClusterProperties(mapClusterProperties(loginEvent))
.setOs(loginEvent.os)
.setArch(loginEvent.arch)
.setOsVersion(loginEvent.osVersion)
.setConnectVersion(loginEvent.connectVersion)
);
}
if (event.protocolRunEvent) {
const { protocolRunEvent } = event;
return new ConnectUsageEventOneOf().setProtocolRunEvent(
new ProtocolRunEvent()
.setClusterProperties(mapClusterProperties(protocolRunEvent))
.setProtocol(protocolRunEvent.protocol)
function setEvent(
apiReq: api.ReportEventRequest,
req: types.ReportEventRequest
): void {
// Non-anonymized events.

if (req.connectUserJobRoleUpdateEvent) {
const { connectUserJobRoleUpdateEvent: event } = req;
const apiEvent = new prehogApi.ConnectUserJobRoleUpdateEvent().setJobRole(
event.jobRole
);

apiReq.setConnectUserJobRoleUpdateEvent(apiEvent);
return;
}
if (event.accessRequestCreateEvent) {
const { accessRequestCreateEvent } = event;
return new ConnectUsageEventOneOf().setAccessRequestCreateEvent(
new AccessRequestCreateEvent()
.setClusterProperties(mapClusterProperties(accessRequestCreateEvent))
.setKind(accessRequestCreateEvent.kind)
);

// Anonymized events.

if (req.connectLogin) {
const { connectLogin: event } = req;
const apiEvent = new prehogApi.ConnectLoginEvent()
.setClusterName(event.clusterName)
.setUserName(event.userName)
.setOs(event.os)
.setArch(event.arch)
.setOsVersion(event.osVersion)
.setConnectVersion(event.connectVersion);

apiReq.setConnectLogin(apiEvent);
return;
}
if (event.accessRequestReviewEvent) {
const { accessRequestReviewEvent } = event;
return new ConnectUsageEventOneOf().setAccessRequestReviewEvent(
new AccessRequestReviewEvent().setClusterProperties(
mapClusterProperties(accessRequestReviewEvent)
)
);

if (req.connectProtocolRun) {
const { connectProtocolRun: event } = req;
const apiEvent = new prehogApi.ConnectProtocolRunEvent()
.setClusterName(event.clusterName)
.setUserName(event.userName)
.setProtocol(event.protocol);

apiReq.setConnectProtocolRun(apiEvent);
return;
}
if (event.accessRequestAssumeRoleEvent) {
const { accessRequestAssumeRoleEvent } = event;
return new ConnectUsageEventOneOf().setAccessRequestAssumeRoleEvent(
new AccessRequestAssumeRoleEvent().setClusterProperties(
mapClusterProperties(accessRequestAssumeRoleEvent)
)
);

if (req.connectAccessRequestCreate) {
const { connectAccessRequestCreate: event } = req;
const apiEvent = new prehogApi.ConnectAccessRequestCreateEvent()
.setClusterName(event.clusterName)
.setUserName(event.userName)
.setKind(event.kind);

apiReq.setConnectAccessRequestCreate(apiEvent);
return;
}
if (event.fileTransferRunEvent) {
const { fileTransferRunEvent } = event;
return new ConnectUsageEventOneOf().setFileTransferRunEvent(
new FileTransferRunEvent()
.setClusterProperties(mapClusterProperties(fileTransferRunEvent))
.setDirection(fileTransferRunEvent.direction)
);

if (req.connectAccessRequestReview) {
const { connectAccessRequestReview: event } = req;

const apiEvent = new prehogApi.ConnectAccessRequestReviewEvent()
.setClusterName(event.clusterName)
.setUserName(event.userName);

apiReq.setConnectAccessRequestReview(apiEvent);
return;
}
if (event.userJobRoleUpdateEvent) {
const { userJobRoleUpdateEvent } = event;
return new ConnectUsageEventOneOf().setUserJobRoleUpdateEvent(
new UserJobRoleUpdateEvent().setJobRole(userJobRoleUpdateEvent.jobRole)
);

if (req.connectAccessRequestAssumeRole) {
const { connectAccessRequestAssumeRole: event } = req;
const apiEvent = new prehogApi.ConnectAccessRequestAssumeRoleEvent()
.setClusterName(event.clusterName)
.setUserName(event.userName);

apiReq.setConnectAccessRequestAssumeRole(apiEvent);
return;
}

throw new Error(`Unrecognized event: ${JSON.stringify(event)}`);
}
if (req.connectFileTransferRunEvent) {
const { connectFileTransferRunEvent: event } = req;
const apiEvent = new prehogApi.ConnectFileTransferRunEvent()
.setClusterName(event.clusterName)
.setUserName(event.userName)
.setDirection(event.direction);

function mapClusterProperties(e: {
clusterProperties?: ClusterProperties.AsObject;
}): ClusterProperties {
if (!e.clusterProperties) {
throw new Error('Missing cluster metadata');
apiReq.setConnectFileTransferRunEvent(apiEvent);
return;
}
return new ClusterProperties()
.setAuthClusterId(e.clusterProperties.authClusterId)
.setClusterName(e.clusterProperties.clusterName)
.setUserName(e.clusterProperties.userName);

throw new Error(`Unrecognized event: ${JSON.stringify(req)}`);
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading