Skip to content

Commit

Permalink
release v0.4.60 from PR #806
Browse files Browse the repository at this point in the history
release v0.4.60 from PR #806
  • Loading branch information
eschultink authored Sep 18, 2024
2 parents cb265e5 + 077a007 commit dcd0738
Show file tree
Hide file tree
Showing 96 changed files with 2,238 additions and 1,936 deletions.
7 changes: 7 additions & 0 deletions .github/workflows/ci-terraform-modules.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,10 @@ jobs:
run: |
terraform init -reconfigure
terraform validate
- name: "Terraform - validate modules/worklytics-ip-blocks"
working-directory: infra/modules/worklytics-ip-blocks
run: |
terraform init -reconfigure
terraform validate
terraform apply --auto-approve
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ Changes to be including in future/planned release notes will be added here.

## Next

## [0.4.60](https://github.com/Worklytics/psoxy/release/tag/v0.4.60)
- Calendar rules change to allow OOO-related snippets to be passed through event title fields;
this is required for proper OOO-analysis in Worklytics Calendar 3.0 methodology.
- MSFT Teams: Support for listing callRecords

## [0.4.58](https://github.com/Worklytics/psoxy/release/tag/v0.4.58)
- Including rules for Slack Huddles through *Rooms* as part of conversation history endpoint
- Rules for Outlook Calendar, Outlook Mail and Teams have been updated for *no app id* and *no group id* cases
Expand Down Expand Up @@ -355,4 +360,4 @@ Upgrade Notes:
- eg, `PSOXY_SHARED` and `PSOXY_GCAL`, to allow IAM policies such as "read `PSOXY_SHARED*`" and
"read+write `PSOXY_GCAL*`" (if shared secrets have common prefix with connector secrets,
then wildcard policy to read shared also grants read of secrets across all connectors)
- keys/salts per value kind (PII, item id, etc)
- keys/salts per value kind (PII, item id, etc)
4 changes: 2 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -353,8 +353,8 @@ For testing your psoxy instance, you will need:
| [Node.js](https://nodejs.org/en/) | 16+ (ideally, an LTS version) | `node --version` |
| [npm](https://www.npmjs.com/package/npm) (should come with `node`) | 8+ | `npm --version` |

NOTE: NodeJS 16 is unmaintained since Oct 2023, so we recommend newer version; but in theory should
work.
NOTE: Node.js v16 is unmaintained since Oct 2023, so **we recommend a newer version: v18, v20**.
_Some Node.js versions (e.g. v21) may display warning messages when running the test scripts_.

We provide a script to check these prereqs, at [`tools/check-prereqs.sh`](https://github.com/Worklytics/psoxy/tree/main/tools/check-prereqs.sh).
That script has no dependencies itself, so should be able to run on any plain POSIX-compliant shell
Expand Down
1 change: 1 addition & 0 deletions docs/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
* [Implementation](guides/implementation.md)
* [Terraform Cloud / Enterprise](guides/terraform-cloud.md)
* [Testing](guides/testing.md)
* [Test tool](guides/psoxy-test-tool.md)
* [Deployment Migration](guides/deployment-migration.md)
* [Upgrade Proxy Versions](guides/upgrading-versions.md)
* [Cleaning Up](guides/cleaning-up.md)
Expand Down
2 changes: 0 additions & 2 deletions docs/aws/authentication-authorization.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,3 @@ asserted the claim that `aud` == `12345678901234567890123456789` to assume the r
Then you use this AWS IAM role as the principal in AWS IAM policies you define to authorize to
invoke your proxy instances via their function URLs (API connectors) or to read from their sanitized
output buckets (bulk data connectors)

See: https://github.com/Worklytics/psoxy/blob/v0.4.40/infra/modules/aws/main.tf#L81-L102
13 changes: 11 additions & 2 deletions docs/faq-security.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@ to perform santization generally across many fields and endpoints.

## Can Psoxy invocation be locked to a set of known IP addresses?

No, but this is not necessary, as requests from your Worklytics tenant to your Psoxy instances are
authenticated via identity federation (OIDC) and authorized by your Cloud providers IAM policies.
Yes, but only to a broad set of IP blocks that are not exclusive to your Worklytics tenant. As
requests from your Worklytics tenant to your Psoxy instances are authenticated via identity
federation (OIDC) and authorized by your Cloud providers IAM policies, IP-based restrictions are not
necessary.

If you take this approach, you will be responsible for updating your IP restrictions frequently as
GCP changes their IP blocks, or your data flow to Worklytics may break. As such, this is not
officially supported by Worklytics. For an example of how to do this, see [worklytics-ip-blocks](../infra/modules/worklytics-ip-blocks/README.md) module.

Your Worklytics tenant is a process running in GCP, personified by a unique GCP service account. You
simply use your cloud's IAM to grant that service account access to your psoxy instance.
Expand All @@ -29,6 +35,9 @@ See [AWS Authentication and Authorization](aws/authentication-authorization.md)

See [GCP Authentication and Authorization](gcp/authentication-authorization.md) for more details.

And always remember: an IP is **not** an authenticated identity for a client, and should not be
relied upon as an authentication mechanism. IPs can be spoofed. It is at best an extra control.

## Can Psoxy instances be deployed behind an AWS API Gateway?

Yes - and prior to March 2022 this was necessary. But AWS has released
Expand Down
36 changes: 30 additions & 6 deletions docs/guides/implementation.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,24 +42,48 @@ Tips:

*can be completed without call; but Worklytics can assist if desired*

- follow `TODO 2` files / use test.sh shell scripts produced by `terraform apply`
- follow `TODO 2` files / use `test *.sh` shell scripts produced by `terraform apply`
- validate that authentication/authorization is correct for all connections, and that you're
satisfied with proxy behavior

Further guidance on proxy testing:

[https://docs.worklytics.co/psoxy/guides/testing](testing.md)

## 4 Authorize Worklytics to Access Sanitized Data

*can be completed without call; but Worklytics can assist if desired*

Authorize Worklytics to invoke API connectors / access sanitized bulk data:
- obtain service account ID of your tenant from Worklytics; configure it in you terraform.tfvars file
- run `terraform apply` again to update IAM policy to reflect the change
Authorize Worklytics to invoke API connectors and access sanitized bulk data:
1. obtain service account ID of your tenant from Worklytics (via [Worklytics web portal](https://app.worklytics.co/analytics/integrations/configuration))
2. configure it in your `terraform.tfvars` file (details below)
3. run `terraform apply` again to update IAM policy to reflect the change

For AWS-hosted case, add the numeric ID of your Worklytics tenant to the list `caller_gcp_service_account_ids`:

eg
```hcl
caller_gcp_service_account_ids = [
"12345678901234567890123456789"
]
```

For GCP-hosted case, add the email address of your Worklytics tenant to the list `worklytics_sa_emails`:

eg
```hcl
worklytics_sa_emails = [
"email@gcpserviceaccount.com"
]
```


## 5 Connect Sanitized Data Sources to Worklytics

*can be completed without call; but Worklytics can assist if desired*

- follow `TODO 3` files (or terraform output values) generated by the `terraform apply` command
- if you do not have access to [Worklytics](https://app.worklytics.co), or you do, but do not have `Data Connection Admin` role, send
these files to the appropriate person
- if you do not have access to [Worklytics](https://app.worklytics.co), or you do, but do not
have `Data Connection Admin` role, send these files to the appropriate person


25 changes: 25 additions & 0 deletions docs/sources/badge/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Badge Swipe Data

Psoxy can pseudonymize badge swipe data for ingestion into Worklytics.

See [https://docs.worklytics.co/knowledge-base/connectors/bulk-data/badge](https://docs.worklytics.co/knowledge-base/connectors/bulk-data/badge)

The default proxy rules for `badge` will pseudonymize `EMPLOYEE_ID`. If your data set does not match
the schema expected by Worklytics, you can adapt it by specifying some custom transforms within
the proxy itself:

```hcl
custom_bulk_connector_rules = {
badge = {
columnsToPseudonymize = [
"EMPLOYEE_ID"
],
columnsToRename = {
"employeeId" = "EMPLOYEE_ID",
"timestamp" = "SWIPE_DATE",
"location" = "BUILDING_ID"
"homeOffice" = "BUILDING_ASSIGNED"
}
}
}
```
2 changes: 2 additions & 0 deletions docs/sources/badge/badge.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
columnsToPseudonymize:
- "EMPLOYEE_ID"
42 changes: 34 additions & 8 deletions docs/sources/google-workspace/calendar/calendar.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,23 @@ endpoints:
jsonPaths:
- "$.items[*].summary"
exceptions:
- "(?i)(\\QFocus Time Block\\E|\\QFocus Time\\E|\\QFocus:\\E|\\QNo Meeting Block\\\
E|\\QNo Meetings Block\\E|\\QNo Meetings\\E|\\QNo Meeting\\E)"
- "(?i)(\\QPrep Time Block\\E|\\QPrep Time\\E|\\QPrep:\\E|\\QPrep \\E|\\QPrepare\
\ \\E)"
- "(?i)\\b(\\QNo Meetings Block\\E|\\QFocus Time Block\\E|\\QNo Meeting Block\\\
E|\\QNo Meetings\\E|\\QFocus Time\\E|\\QNo Meeting\\E|\\Qno mtg\\E|\\QFocus\\\
E)[\\s:]*\\b"
- "(?i)\\b(\\QPrep Time Block\\E|\\QPrep Time\\E|\\QPrep\\E)[\\s:]*\\b"
- "(?i)\\b(\\QOut of the Office\\E|\\QOut of Office\\E|\\QOOO\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qbrainstorming\\E|\\Qteam building\\E|\\Qteambuilding\\E|\\Qbrain\
\ storm\\E|\\Qoffice hour\\E|\\Qbrainstorm\\E|\\Qhappy hour\\E|\\Qcheck in\\\
E|\\Qcheck-in\\E|\\Qstand up\\E|\\Qstand-up\\E|\\Qcheckin\\E|\\Qon-site\\E|\\\
Qstandup\\E|\\Qcoffee\\E|\\Qonsite\\E|\\Qsocial\\E|\\Qlunch\\E|\\Qcall\\E|\\\
Qfood\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qbi-weekly\\E|\\Qquarterly\\E|\\Qbiweekly\\E|\\Qmonthly\\E|\\Qweekly\\\
E|\\Qdaily\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qteam meeting\\E|\\Qone-on-one\\E|\\Qall-hands\\E|\\Qall hands\\\
E|\\Qallhands\\E|\\Q1-on-1\\E|\\Q1:1\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qinformation sharing\\E|\\Qdecision making\\E|\\Qproblem solving\\\
E|\\Qdecision\\E|\\Qhand off\\E|\\Qhand-off\\E|\\Qhandover\\E|\\Qhandoff\\E|\\\
Qreview\\E|\\Qsprint\\E|\\Qretro\\E)[\\s:]*\\b"
- !<filterTokenByRegex>
jsonPaths:
- "$.items[*].description"
Expand Down Expand Up @@ -58,10 +71,23 @@ endpoints:
jsonPaths:
- "$.items[*].summary"
exceptions:
- "(?i)(\\QFocus Time Block\\E|\\QFocus Time\\E|\\QFocus:\\E|\\QNo Meeting Block\\\
E|\\QNo Meetings Block\\E|\\QNo Meetings\\E|\\QNo Meeting\\E)"
- "(?i)(\\QPrep Time Block\\E|\\QPrep Time\\E|\\QPrep:\\E|\\QPrep \\E|\\QPrepare\
\ \\E)"
- "(?i)\\b(\\QNo Meetings Block\\E|\\QFocus Time Block\\E|\\QNo Meeting Block\\\
E|\\QNo Meetings\\E|\\QFocus Time\\E|\\QNo Meeting\\E|\\Qno mtg\\E|\\QFocus\\\
E)[\\s:]*\\b"
- "(?i)\\b(\\QPrep Time Block\\E|\\QPrep Time\\E|\\QPrep\\E)[\\s:]*\\b"
- "(?i)\\b(\\QOut of the Office\\E|\\QOut of Office\\E|\\QOOO\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qbrainstorming\\E|\\Qteam building\\E|\\Qteambuilding\\E|\\Qbrain\
\ storm\\E|\\Qoffice hour\\E|\\Qbrainstorm\\E|\\Qhappy hour\\E|\\Qcheck in\\\
E|\\Qcheck-in\\E|\\Qstand up\\E|\\Qstand-up\\E|\\Qcheckin\\E|\\Qon-site\\E|\\\
Qstandup\\E|\\Qcoffee\\E|\\Qonsite\\E|\\Qsocial\\E|\\Qlunch\\E|\\Qcall\\E|\\\
Qfood\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qbi-weekly\\E|\\Qquarterly\\E|\\Qbiweekly\\E|\\Qmonthly\\E|\\Qweekly\\\
E|\\Qdaily\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qteam meeting\\E|\\Qone-on-one\\E|\\Qall-hands\\E|\\Qall hands\\\
E|\\Qallhands\\E|\\Q1-on-1\\E|\\Q1:1\\E)[\\s:]*\\b"
- "(?i)\\b(\\Qinformation sharing\\E|\\Qdecision making\\E|\\Qproblem solving\\\
E|\\Qdecision\\E|\\Qhand off\\E|\\Qhand-off\\E|\\Qhandover\\E|\\Qhandoff\\E|\\\
Qreview\\E|\\Qsprint\\E|\\Qretro\\E)[\\s:]*\\b"
- !<filterTokenByRegex>
jsonPaths:
- "$.description"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=XzZrbzMyZDlvNnNwamVlOWs2b29qaWQ5bTZncWpnY3BtNmNxamdjMWk2c29qaWMxcCBlcmlrQHdvcmtseXRpY3MuY28",
"created":"2015-07-02T15:47:57.000Z",
"updated":"2015-07-02T15:54:52.097Z",
"summary":"",
"summary":"Call ",
"description":null,
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"worklytics.co\",\"hash\":\"Qf4dLJ4jfqZLn9ef4VirvYjvOnRaVI5tf5oLnM65YOA\"}",
Expand Down Expand Up @@ -209,7 +209,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=aHFqOWY4ajg3Ym9iazY3MXV0ZXJ2MTRxb3MgZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-02T22:54:23.000Z",
"updated":"2015-07-03T11:24:21.213Z",
"summary":"",
"summary":"Call: ",
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"imagine.com\",\"hash\":\"aT3usZghgyWmDoXRncq5qhmQJQMjY49xDJylpM4TyYI\"}"
},
Expand Down Expand Up @@ -274,7 +274,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=amJpdXNhNWtraHBvMjkxM3RjaGwxOWI1c28gZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-06T13:04:48.000Z",
"updated":"2015-07-06T13:05:35.772Z",
"summary":"",
"summary":"call ",
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"worklytics.co\",\"hash\":\"Qf4dLJ4jfqZLn9ef4VirvYjvOnRaVI5tf5oLnM65YOA\"}",
"self":true
Expand Down Expand Up @@ -318,7 +318,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=MWhidGlndm50cjRhM3FjbjNjbWxsMzkxdTAgZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-06T17:13:57.000Z",
"updated":"2015-07-06T17:13:57.241Z",
"summary":"",
"summary":"call",
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"worklytics.co\",\"hash\":\"Qf4dLJ4jfqZLn9ef4VirvYjvOnRaVI5tf5oLnM65YOA\"}",
"self":true
Expand Down Expand Up @@ -350,7 +350,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=bmZlYmo4OWk0ZG5nazZuMG1ibjhvNHVvMG8gZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-06T17:14:13.000Z",
"updated":"2015-07-06T17:14:13.719Z",
"summary":"",
"summary":"call ",
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"worklytics.co\",\"hash\":\"Qf4dLJ4jfqZLn9ef4VirvYjvOnRaVI5tf5oLnM65YOA\"}",
"self":true
Expand Down Expand Up @@ -382,7 +382,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=bjl2cGYzNHNsM3NvOG5wOGtoZzZsNHNhdGsgZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-06T17:23:46.000Z",
"updated":"2015-07-06T21:41:02.706Z",
"summary":"",
"summary":"Check-In ",
"description":null,
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"imagine.com\",\"hash\":\"zFQdzW2XNVkbRC1rsruylhQnOtFF7pCrqZ9VoHQt-cs\"}"
Expand Down Expand Up @@ -427,7 +427,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=b3Z0NGRnamsxYzA1aXBvZzVucnZ2YXVrMWcgZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-06T17:24:36.000Z",
"updated":"2015-07-07T13:30:46.137Z",
"summary":"",
"summary":"Call: ",
"description":null,
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"imagine.com\",\"hash\":\"zFQdzW2XNVkbRC1rsruylhQnOtFF7pCrqZ9VoHQt-cs\"}"
Expand Down Expand Up @@ -568,7 +568,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=MW5wcXQyaWg2dDZrMGEwYTU0Mzh2ZWFkbzggZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-27T22:03:38.000Z",
"updated":"2015-07-27T22:21:49.187Z",
"summary":"",
"summary":"Call",
"description":null,
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"imagine.com\",\"hash\":\"zFQdzW2XNVkbRC1rsruylhQnOtFF7pCrqZ9VoHQt-cs\"}"
Expand Down Expand Up @@ -628,7 +628,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=b25lNm9xdGc1cTY2cXR1c3JwYmt2NzgzOW8gZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-08T10:54:04.000Z",
"updated":"2015-08-04T11:14:58.108Z",
"summary":"",
"summary":"OOO",
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"worklytics.co\",\"hash\":\"Qf4dLJ4jfqZLn9ef4VirvYjvOnRaVI5tf5oLnM65YOA\"}",
"self":true
Expand Down Expand Up @@ -665,7 +665,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=dDkzOGNkNDVkaXZyZzdxdmhkdXNnMXNqYmMgZXJpa0B3b3JrbHl0aWNzLmNv",
"created":"2015-07-08T10:54:33.000Z",
"updated":"2015-08-04T11:15:45.864Z",
"summary":"",
"summary":"OOO",
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"worklytics.co\",\"hash\":\"Qf4dLJ4jfqZLn9ef4VirvYjvOnRaVI5tf5oLnM65YOA\"}",
"self":true
Expand Down Expand Up @@ -792,7 +792,7 @@
"htmlLink":"https://www.google.com/calendar/event?eid=czFnaWFjaDB2cmdzYWtsYzI1cDZmMmpwYzBfMjAxNTEwMDVUMTEwMDAwWiBlcmlrQHdvcmtseXRpY3MuY28",
"created":"2015-10-06T17:58:53.000Z",
"updated":"2015-10-06T17:59:33.944Z",
"summary":"",
"summary":"call ",
"creator":{
"email":"{\"scope\":\"email\",\"domain\":\"worklytics.co\",\"hash\":\"Qf4dLJ4jfqZLn9ef4VirvYjvOnRaVI5tf5oLnM65YOA\"}",
"self":true
Expand Down
23 changes: 17 additions & 6 deletions docs/sources/hris/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,32 @@ The Psoxy HRIS (human resource information system) connector is intended to sani
from an HRIS/HCM system which you intend to transfer to Worklytics. The expected format is a CSV
file, as defined in the documentation for import data (obtain from Worklytics).

See: https://docs.worklytics.co/knowledge-base/connectors/bulk-data/hris-snapshots
See: [https://docs.worklytics.co/knowledge-base/connectors/bulk-data/hris-snapshots](https://docs.worklytics.co/knowledge-base/connectors/bulk-data/hris-snapshots)

The default proxy rules for `hris` will pseudonymize `EMPLOYEE_ID`, `EMPLOYEE_EMAIL`, and `MANAGER_ID`
columns. If you ALSO include the `MANAGER_EMAIL` column, you must use custom rules by adding
something like the following in your `terraform.tfvars`:
The default proxy rules for `hris` will pseudonymize `EMPLOYEE_ID`, `EMPLOYEE_EMAIL`, `MANAGER_ID` -
as well as a `MANAGER_EMAIL` column if it's included.

If your HRIS data does not match the expected schema above, you can customize the proxy rules to
perform some basic ETL-like transforms on the data within the proxy itself:

```hcl
custom_bulk_connector_rules = {
hris = {
columnsToPseudonymize = [
"EMPLOYEE_ID",
"EMPLOYEE_EMAIL",
"MANAGER_ID",
"MANAGER_ID"
],
columnsToPseudonymizeIfPresent = [
"MANAGER_EMAIL"
]
],
columnsToRedact = [
"SALARY",
"BANK_ACCOUNT_NUMBER"
],
columnsToRename = {
"employeeId" = "EMPLOYEE_ID",
}
}
}
```
Expand Down
25 changes: 25 additions & 0 deletions docs/sources/metrics/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Metrics Data

- [Example data](metrics-example.csv)
- [Example sanitized data](metrics-example-sanitized.csv)
- [Example rules](metrics.yaml)

The default `metrics` proxy rules pseudonymize the `EMPLOYEE_ID` column. If your metrics data does
not match the expected schema above, you can customize the proxy rules to perform some basic ETL-like
transforms along the lines of the following:

```hcl
custom_bulk_connector_rules = {
metrics = {
columnsToPseudonymize = [
"EMPLOYEE_ID"
],
columnsToRename = {
"employeeId" = "EMPLOYEE_ID",
"metricName" = "KEY",
"metricValue" = "VALUE"
}
}
}
```
2 changes: 2 additions & 0 deletions docs/sources/metrics/metrics-example-sanitized.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
EMPLOYEE_ID,WEEK,KEY,VALUE
"{""hash"":""dULNJL3EY9ZyndC2NkYH_Hi1qmZAuPmSZYwJhfMmj3g""}",2024-09-02,Time in Meetings,3.25
2 changes: 2 additions & 0 deletions docs/sources/metrics/metrics-example.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
EMPLOYEE_ID,WEEK,KEY,VALUE
1,2024-09-02,Time in Meetings,3.25
2 changes: 2 additions & 0 deletions docs/sources/metrics/metrics.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
columnsToPseudonymize:
- "EMPLOYEE_ID"
Loading

0 comments on commit dcd0738

Please sign in to comment.