Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add basic usage example #39

Merged
merged 6 commits into from
Nov 13, 2023
Merged
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
2 changes: 2 additions & 0 deletions examples/logger/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.stack-work/
*~
21 changes: 21 additions & 0 deletions examples/logger/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# logger-example

This Haskell code example demonstrates a basic logging simulation.

It emulates a logging operation that sequentially generates a set of log messages. Within a loop, it prints messages to the console, ranging from "Log message 1" to "Log message 5". Each message is printed alongside a confirmation that it has been logged, with a 1-second delay between messages.

Upon reaching "Log message 5", the process shifts from console output to writing this message into a log file.


## How to use this example

### Required dependencies

- atomic-write
- text
- filepath


### Run Example

- Use the command: `stack run`
2 changes: 2 additions & 0 deletions examples/logger/Setup.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain
1 change: 1 addition & 0 deletions examples/logger/app.log
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Log message 5
30 changes: 30 additions & 0 deletions examples/logger/app/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import System.AtomicWrite.Writer.Text
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import Control.Monad (forM_)
import Control.Concurrent (forkIO, threadDelay)

logFilePath :: FilePath
logFilePath = "app.log"

logMessage :: FilePath -> T.Text -> IO ()
logMessage logFile message = atomicWriteFile logFile message

simulateLoggingProcess :: FilePath -> IO ()
simulateLoggingProcess logFile = do
forM_ [1..10 :: Int] $ \i -> do
let message = "Log message " <> show i
logMessage logFile (T.pack message)
putStrLn $ "Logged: " <> message
threadDelay 1000000

main :: IO ()
main = do
TIO.writeFile logFilePath mempty

_ <- forkIO (simulateLoggingProcess logFilePath)

threadDelay 5000000

putStrLn "Log file contents: "
TIO.readFile logFilePath >>= TIO.putStrLn
76 changes: 76 additions & 0 deletions examples/logger/logger-example.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
cabal-version: 2.2

-- This file has been generated from package.yaml by hpack version 0.36.0.
--
-- see: https://github.com/sol/hpack

name: logger-example
version: 0.1.0.0
description: Please see the README on GitHub at <https://github.com/githubuser/logger-example#readme>
homepage: https://github.com/githubuser/logger-example#readme
bug-reports: https://github.com/githubuser/logger-example/issues
author: Author name here
maintainer: [email protected]
copyright: 2023 Author name here
license: BSD-3-Clause
license-file: LICENSE
build-type: Simple
extra-source-files:
README.md
CHANGELOG.md

source-repository head
type: git
location: https://github.com/githubuser/logger-example

library
exposed-modules:
Lib
other-modules:
Paths_logger_example
autogen-modules:
Paths_logger_example
hs-source-dirs:
src
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints
build-depends:
atomic-write >=0.2
, base >=4.7 && <5
, filepath >=1.4 && <2
, text >=2.0
default-language: Haskell2010

executable logger-example-exe
main-is: Main.hs
other-modules:
Paths_logger_example
autogen-modules:
Paths_logger_example
hs-source-dirs:
app
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
build-depends:
atomic-write >=0.2
, base >=4.7 && <5
, filepath >=1.4 && <2
, logger-example
, text >=2.0
default-language: Haskell2010

test-suite logger-example-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_logger_example
autogen-modules:
Paths_logger_example
hs-source-dirs:
test
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
build-depends:
atomic-write >=0.2
, base >=4.7 && <5
, filepath >=1.4 && <2
, logger-example
, text >=2.0
default-language: Haskell2010
52 changes: 52 additions & 0 deletions examples/logger/package.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: logger-example
version: 0.1.0.0
github: "stackbuilders/atomic-write"
license: BSD-3-Clause
author: "@BarbDMC"
maintainer: "[email protected]"
copyright: "2023 @BarbDMC"

extra-source-files:
- README.md
- CHANGELOG.md

# Metadata used when publishing your package
# synopsis: Short description of your package
# category: Web

# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description: Please see the README on GitHub at <https://github.com/githubuser/logger-example#readme>

dependencies:
- base >= 4.7 && < 5
- atomic-write >= 0.2
- text >= 2.0
- filepath >= 1.4 && < 2

ghc-options:
- -Wall
- -Wcompat
- -Widentities
- -Wincomplete-record-updates
- -Wincomplete-uni-patterns
- -Wmissing-export-lists
- -Wmissing-home-modules
- -Wpartial-fields
- -Wredundant-constraints

library:
source-dirs: src

executables:
logger-example-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- logger-example

7 changes: 7 additions & 0 deletions examples/logger/stack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

resolver:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/19.yaml


packages:
- .
13 changes: 13 additions & 0 deletions examples/logger/stack.yaml.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# This file was autogenerated by Stack.
# You should not edit this file by hand.
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files

packages: []
snapshots:
- completed:
sha256: fb482b8e2d5d061cdda4ba1da2957c012740c893a5ee1c1b99001adae7b1fbe7
size: 640046
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/19.yaml
original:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/19.yaml