Skip to content

use optparse to allow command options/defaults#11627

Merged
solipet merged 1 commit intologin-hackathon-2024-user-narrativefrom
dprice/optparse
Dec 12, 2024
Merged

use optparse to allow command options/defaults#11627
solipet merged 1 commit intologin-hackathon-2024-user-narrativefrom
dprice/optparse

Conversation

@solipet
Copy link
Contributor

@solipet solipet commented Dec 11, 2024

🛠 Summary of changes

Uses the optparse gem to use command flags to pass in the user's uuid, start/end times and timezone.

$  bin/summarize-user-events -h

    Summarize user events in a human-readable format

    Cloudwatch logs can be read from stdin as newline-delimited JSON (ndjson),
    or fetched directly via aws-vault.

    usage: summarize-user-events [OPTIONS]

    Examples:
      summarize-user-events << events.ndjson
      aws-vault exec prod-power -- summarize-user-events -u 1234-5678-90ab-cdef -s 2024-12-09T10:00:00 -e 2024-12-09T14:30:00 -z America/New_York

    -h, --help                       Display this message
    -u, --user-uuid USER_UUID        UUID of the protagonist of the story
    -s, --start-time START_TIME      Time of the start of the query period (e.g. 2024-12-09T10:00:00Z), default: 1 week ago
    -e, --end_time END_TIME          Time of the end of the query period (e.g. 2024-12-09T14:30:00Z), default: 1 week from start
    -z, --timezone TIMEZONE          Timezone to use (e.g. America/New_York), default: UTC

@to_date = parse_time(end_time) || start_time.present? ? from_date + 1.week : Time.zone.now
end

def parse_time(time_str)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to wait to parse the times until after we set the zone on line 29

end
end

def stdin_source(&block)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These defs of stdin_source and cloudwatch_source were overridden later on.

@solipet solipet merged commit 9894989 into login-hackathon-2024-user-narrative Dec 12, 2024
@solipet solipet deleted the dprice/optparse branch December 12, 2024 03:32
matthinz added a commit that referenced this pull request Jan 8, 2025
* Initial cloudwatch query script to summarize events

* Query cloudwatch and get user events

* add timestamp remove limit

* [Hackathon] Allow sourcing events from stdin (#11619)

* Allow sourcing events from stdin

It may be useful sometimes to take a local cache of cloudwatch events and pipe them into this command.

[skip changelog]

* Add 'limit: 10000' to CW query

This is required for `complete` to work

* [Hackathon] Add ExampleMatcher (#11622)

* Add ExampleMatcher

Add an example matcher that just counts events and outputs how many it saw.

[skip changelog]

* Remove excess whitespace

* Add frozen_string_literal: true

* use optparse to allow command options/defaults (#11627)

* [HACKATHON] Initial crack at an IdV matcher (#11624)

* Initial crack at an IdV matcher

Matcher is a state machine that collects IDV "attempts" as they happen and tries to suss out interesting things about them.

[skip changelog]

* removed unused method

---------

Co-authored-by: Douglas Price <douglas.price@gsa.gov>

* [HACKATHON] Output formatting tweaks (#11635)

* Normalize @timestamp to UTC for each event

Pre-parse it in the script so that matchers don't have to worry about it

* Slightly improve output

- Include timestamps where possible

[skip changelog]

* [HACKATHON] Minor tweaks (#11637)

* Don't crash if no events found

* Tweak handling of --end-date

- Use a dash rather than underscore
- Make sure we respect it if it's passed in

* Sort events on stdin before processing

Events from Cloudwatch queries will be sorted, but stdin is not guaranteed.

Processing unsorted events can lead to weird, weird, outcomes

* report on TrueID success/failure (#11638)

* Try to identify IDV abandonment (#11639)

If the user:

- Has not completed the initial workflow and
- Does not have an idv-related event new that 1 hour

Call their attempt abandoned

* Login hackathon 2024 user narrative account deletion (#11629)

* include timestamp

* add account deletion narrative matcher

* remove unneeded matcher requirement

* add deletion matcher

* lint

* rename account deletion

* read events from file without changing stdin

* remove ipp from gpo code submission event

* update example documentation in script

* Update lib/event_summarizer/vendor_result_evaluators/aamva.rb

Co-authored-by: Zach Margolis <zachmargolis@users.noreply.github.com>

* Start writing a spec

* Tidy up logic in IV result evaluator

* Set event['name'] if not already set

* Fix typo

* Use Eastern time zone by default

* Update pluralization code + add spec

* Start on spec for summarize-user-events command

* Protect rubocop's delicate sensibilities

* Add more specs

Add some specs around option parsing, time parsing, and actually running the program

* Look at banner michael

---------

Co-authored-by: Malick Diarra <malick.diarra@gsa.gov>
Co-authored-by: Doug Price <douglas.price@gsa.gov>
Co-authored-by: Eileen <eileenmcfarland@navapbc.com>
Co-authored-by: eileen-nava <80347702+eileen-nava@users.noreply.github.com>
Co-authored-by: Zach Margolis <zachmargolis@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants