A couple more command line arguments and a lot of TODO notes.

This commit is contained in:
Benjamin Summers 2019-08-14 15:18:59 -07:00
parent 1a024785d4
commit 1eda9d3401
2 changed files with 132 additions and 21 deletions

View File

@ -13,21 +13,24 @@ import System.Environment (getProgName)
--------------------------------------------------------------------------------
data Opts = Opts
{ oQuiet :: Bool
, oHashless :: Bool
, oExit :: Bool
, oDryRun :: Bool
, oVerbose :: Bool
, oAmesPort :: Maybe Word16
, oProf :: Bool
{ oQuiet :: Bool
, oHashless :: Bool
, oExit :: Bool
, oDryRun :: Bool
, oVerbose :: Bool
, oAmesPort :: Maybe Word16
, oProf :: Bool
, oCollectFx :: Maybe FilePath
}
deriving (Show)
data New = New
{ nPillPath :: FilePath
, nShipAddr :: Text
, nPierPath :: FilePath
, nArvoDir :: Maybe FilePath
{ nPillPath :: FilePath
, nShipAddr :: Text
, nPierPath :: FilePath
, nArvoDir :: Maybe FilePath
, nBootFake :: Bool
, nLocalhost :: Bool
}
deriving (Show)
@ -97,6 +100,14 @@ new = do
nPillPath <- strArgument (metavar "PILL" <> help "Path to pill file")
nShipAddr <- strArgument (metavar "SHIP" <> help "Ship address")
nLocalhost <- switch $ short 'L'
<> long "local"
<> help "Localhost-only networking"
nBootFake <- switch $ short 'F'
<> long "fake"
<> help "Create a fake ship"
nArvoDir <- option auto $ metavar "ARVO"
<> short 'A'
<> value Nothing
@ -118,6 +129,11 @@ opts = do
oDryRun <- switch (short 'N' <> help "Dry run -- Don't persist")
oProf <- switch (short 'p' <> help "Enable profiling")
oCollectFx <- option auto $ metavar "FXDIR"
<> long "collect-fx"
<> help "Write effects to disk for debugging"
<> value Nothing
pure (Opts{..})
cmd :: Parser Cmd

View File

@ -1,3 +1,108 @@
{-
# Booting a Ship
- TODO Correctly setup the Pier directory.
- TODO Hook up CLI command.
- TODO Don't just boot, also run the ship (unless `-x` is set).
- TODO Figure out why ships booted by us don't work.
# Event Pruning
- `king discard-events NUM_EVENTS`: Delete the last `n` events from
the event log.
- `king discard-events-interactive`: Iterate through the events in
the event log, from last to first, pretty-print each event, and
ask if it should be pruned.
# `-L` -- Local-Only Networking
Localhost-only networking, even on real ships.
# `-O` -- Networking Disabled
Run networking drivers, but configure them to never send any packages
and to never open any ports.
# `-N` -- Dry Run
Disable all persistence and use no-op networking.
# `-x` -- Exit Immediately
When creating a new ship, or booting an existing one, simply get to
a good state, snapshot, and then exit. Don't do anything that has
any effect on the outside world, just boot or catch the snapshot up
to the event log.
# Proper Logging
- TODO Consider using RIO's logging infrastructure.
- TODO If that's too heavy, figure out what the best way to do
logging is now.
- TODO Convert all existing logging to the chosen logging system.
- TODO Add more logging to all the places. Logging is super useful.
# Implement subcommands to test event and effect parsing.
- `king * --collect-fx`: All effects that come from the serf get
written into the `effects` LMDB database.
- `king parse-events PIER`: Run through the event log, and parse all
events, print failures.
- `king parse-effects PIER`: Run through the event log, and parse all
effects, print any failures.
- `king clear-fx PIER`: Deletes all collected effects.
- `king full-replay PIER`: Replays the whole event log events, print
any failures. On success, replace the snapshot.
# Validate Pill Files
- `king validate-pill PILL`: Parse a pill file. Print an error on
exit, and print a description of the pill on success.
# Full Replay -- An Integration Test
- Copy the event log:
- Create a new event log at the destination.
- Stream events from the first event log.
- Parse each event.
- Re-Serialize each event.
- Verify that the round-trip was successful.
- Write the event into the new database.
- Replay the event log at the destination.
- If `--collect-fx` is set, then record effects as well.
- Snapshot.
- Verify that the final mug is the same as it was before.
# Implement Remaining Serf Flags
- `DebugRam`: Memory debugging.
- `DebugCpu`: Profiling
- `CheckCorrupt`: Heap Corruption Tests
- `CheckFatal`: TODO What is this?
- `Verbose`: TODO Just the `-v` flag?
- `DryRun`: TODO Just the `-N` flag?
- `Quiet`: TODO Just the `-q` flag?
- `Hashless`: Don't use hashboard for jets.
- `Trace`: TODO What does this do?
-}
module Main where
import ClassyPrelude
@ -136,16 +241,6 @@ tryParseEvents dir first = do
serfFlags :: Serf.Flags
serfFlags = [Serf.Hashless, Serf.DryRun] -- [Serf.Verbose, Serf.Trace]
-- = DebugRam
-- | DebugCpu
-- | CheckCorrupt
-- | CheckFatal
-- | Verbose
-- | DryRun
-- | Quiet
-- | Hashless
-- | Trace
collectedFX :: FilePath -> Acquire ()
collectedFX top = do
log <- Log.existing (top <> "/.urb/log")