Compare commits

...

No commits in common. "b2fd087e4c5cf38ee686ee38d25c942ba3ec570e" and "6fa9746f360bf3be88b88e125abcb10b64bbfc28" have entirely different histories.

5 changed files with 57 additions and 20 deletions

View File

@ -3,17 +3,36 @@
module Main where module Main where
import Soostone import Soostone ( app, middleWare, AppState(AppState, sqliteFile) )
import Control.Monad import Control.Monad ( void, when )
import Data.Version (showVersion) import Data.Version (showVersion)
import Database.SQLite.Simple import Database.SQLite.Simple ( execute_, open, Connection )
import Network.Wai.Handler.Warp ( run ) import Network.Wai.Handler.Warp ( run )
import Options.Applicative import Options.Applicative
( fullDesc,
execParser,
progDesc,
helper,
(<**>),
info,
command,
subparser,
strOption,
value,
showDefault,
metavar,
eitherReader,
option,
hidden,
help,
long,
infoOption,
Parser )
import Paths_soostone ( version ) import Paths_soostone ( version )
import Prometheus import Prometheus ( register )
import Prometheus.Metric.GHC import Prometheus.Metric.GHC ( ghcMetrics )
import Prometheus.Metric.Proc import Prometheus.Metric.Proc ( procMetrics )
import Text.Read ( readEither ) import Text.Read ( readEither )
@ -91,5 +110,3 @@ main = do
createTables :: Connection -> IO () createTables :: Connection -> IO ()
createTables con = do createTables con = do
execute_ con "CREATE TABLE IF NOT EXISTS keys (id INTEGER PRIMARY KEY, key TEXT, count INTEGER)" execute_ con "CREATE TABLE IF NOT EXISTS keys (id INTEGER PRIMARY KEY, key TEXT, count INTEGER)"

View File

@ -12,8 +12,9 @@ import Soostone.Types
import Control.Monad.Reader (runReaderT) import Control.Monad.Reader (runReaderT)
import Network.Wai ( Middleware ) import Network.Wai ( Middleware )
import Network.Wai.Middleware.Prometheus import Network.Wai.Middleware.Prometheus ( def, prometheus )
import Servant import Servant
( Application, HasServer(ServerT), Handler, hoistServer, serve )
soostoneServer :: ServerT SoostoneAPI AppM soostoneServer :: ServerT SoostoneAPI AppM

View File

@ -4,10 +4,20 @@
module Soostone.API where module Soostone.API where
import Soostone.Types import Soostone.Types ( Count, Key )
import Servant import Servant
import Servant.API.Generic ( Proxy(..),
JSON,
type (:>),
ReqBody,
Post,
QueryParam',
Required,
Strict,
Get,
NamedRoutes )
import Servant.API.Generic ( Generic, GenericMode(type (:-)) )
type SoostoneAPI = NamedRoutes API type SoostoneAPI = NamedRoutes API
@ -24,4 +34,3 @@ data MainAPI mode = MainAPI {
api :: Proxy SoostoneAPI api :: Proxy SoostoneAPI
api = Proxy :: Proxy SoostoneAPI api = Proxy :: Proxy SoostoneAPI

View File

@ -4,10 +4,18 @@
module Soostone.Handlers where module Soostone.Handlers where
import Soostone.Types import Soostone.Types
( AppState(AppState, sqliteFile), AppM, Count(..), Key )
import Data.Functor import Data.Functor ( ($>) )
import Database.SQLite.Simple import Database.SQLite.Simple
import Control.Monad.Catch ( open,
Connection,
close,
executeNamed,
queryNamed,
withImmediateTransaction,
NamedParam((:=)) )
import Control.Monad.Catch ( finally )
import Control.Monad.Reader ( ask ) import Control.Monad.Reader ( ask )
import Control.Monad.IO.Class ( liftIO ) import Control.Monad.IO.Class ( liftIO )

View File

@ -4,17 +4,19 @@
module Soostone.Types where module Soostone.Types where
import Control.Monad.Catch ( MonadMask, MonadCatch, MonadThrow ) import Control.Monad.Catch ( MonadMask, MonadCatch, MonadThrow )
import Control.Monad.Error.Class import Control.Monad.Error.Class ( MonadError(throwError) )
import Control.Monad.IO.Class ( MonadIO(..) ) import Control.Monad.IO.Class ( MonadIO(..) )
import Control.Monad.Reader.Class ( MonadReader ) import Control.Monad.Reader.Class ( MonadReader )
import Control.Monad.Trans.Reader (ReaderT) import Control.Monad.Trans.Reader (ReaderT)
import Data.Aeson hiding (Key) import Data.Aeson
import Data.String ( defaultOptions, genericToEncoding, FromJSON, ToJSON(toEncoding) )
import Data.String ( IsString(fromString) )
import Data.Text ( Text ) import Data.Text ( Text )
import Database.SQLite.Simple import Database.SQLite.Simple ( field, FromRow(..) )
import Database.SQLite.Simple.ToField import Database.SQLite.Simple.ToField ( ToField(..) )
import Servant import Servant
import Servant.API.Generic ( Handler, ServerError(errBody), FromHttpApiData, err500 )
import Servant.API.Generic ( Generic )
newtype Key = Key Text newtype Key = Key Text