packages feed

hledger-flow-0.16.1: src/Hledger/Flow/Internals.hs

{-# LANGUAGE TemplateHaskell #-}

module Hledger.Flow.Internals where

import qualified Data.Text as T
import Data.Version (Version, showVersion)
import Development.GitRev
import GHC.Conc (getNumCapabilities, getNumProcessors)
import Paths_hledger_flow (version)
import qualified System.Info as Sys

data SystemInfo = SystemInfo
  { os :: String,
    arch :: String,
    compilerName :: String,
    compilerVersion :: Version,
    cores :: Int,
    availableCores :: Int
  }
  deriving (Show)

versionInfo :: SystemInfo -> T.Text
versionInfo sysInfo =
  T.pack
    ( "hledger-flow "
        ++ showVersion version
        ++ " "
        ++ os sysInfo
        ++ " "
        ++ arch sysInfo
        ++ " "
        ++ compilerName sysInfo
        ++ " "
        ++ showVersion (compilerVersion sysInfo)
        ++ " "
        ++ $(gitHash)
    )

systemInfo :: IO SystemInfo
systemInfo = do
  processors <- getNumProcessors
  available <- getNumCapabilities
  return
    SystemInfo
      { os = Sys.os,
        arch = Sys.arch,
        compilerName = Sys.compilerName,
        compilerVersion = Sys.compilerVersion,
        cores = processors,
        availableCores = available
      }