@@ -16,6 +16,7 @@ import Control.Monad.Reader
16import Control.Task.Scheduler
16import Control.Task.Scheduler
17import Data.Aeson
17import Data.Aeson
18import Data.ByteString
18import Data.ByteString
19+import qualified Data.Csv as Csv
19import Data.IORef
20import Data.IORef
20import Data.Map (Map)
21import Data.Map (Map)
21import qualified Data.Map as M
22import qualified Data.Map as M
@@ -26,12 +27,13 @@ import Data.Tasks.StatusUpdate
26import qualified Data.Text as T
27import qualified Data.Text as T
27import Data.Yaml
28import Data.Yaml
28import GHC.Generics
29import GHC.Generics
29−import GitHub
30+import GitHub hiding (Accept)
30import GitHub.App.Auth
31import GitHub.App.Auth
31import GitHub.App.Request
32import GitHub.App.Request
32import GitHub.Data.Name
33import GitHub.Data.Name
33import GitHub.Data.Webhooks.Events
34import GitHub.Data.Webhooks.Events
34import GitHub.Data.Webhooks.Payload
35import GitHub.Data.Webhooks.Payload
36+import Network.HTTP.Media.MediaType
35import Network.Wai.Handler.Warp
37import Network.Wai.Handler.Warp
36import Servant
38import Servant
37import Servant.GitHub.Webhook
39import Servant.GitHub.Webhook
@@ -64,6 +66,7 @@ type API =
64 :> Capture "sha" String
66 :> Capture "sha" String
65 :> "restart"
67 :> "restart"
66 :> Post '[HTML] Markup
68 :> Post '[HTML] Markup
69+ :<|> "results" :> Capture "task name" String :> Get '[CSV, HTML] [Score]
68webhookInstallation :: MonadIO m => RepoWebhookEvent -> ((), InstallationEvent) -> m ()
71webhookInstallation :: MonadIO m => RepoWebhookEvent -> ((), InstallationEvent) -> m ()
69webhookInstallation _ ((), ev) =
72webhookInstallation _ ((), ev) =
@@ -146,7 +149,7 @@ newtype ServerM (schema :: SchemasType) a
148server :: ServerT API (ServerM Schema)
151server :: ServerT API (ServerM Schema)
149−server = (webhookInstallation :<|> webhookPushEvent) :<|> getSubmissionR :<|> retestSubmission
152+server = (webhookInstallation :<|> webhookPushEvent) :<|> getSubmissionR :<|> retestSubmission :<|> getResults
151runServer :: IO ()
154runServer :: IO ()
152runServer = do
155runServer = do
@@ -166,7 +169,7 @@ runServer = do
166 githubUserName = GithubUserName githubUsername,
169 githubUserName = GithubUserName githubUsername,
167 githubAccessToken = GithubAccessToken personalAccessToken,
170 githubAccessToken = GithubAccessToken personalAccessToken,
168 tasks = ts,
171 tasks = ts,
169− logger = simpleMessageAction,
172+ logger = cfilter ((logSeverity <=) . msgSeverity) richMessageAction,
170 baseUrl = baseSiteUrl,
173 baseUrl = baseSiteUrl,
171 dockerUrl = T.pack cfgDockerUrl
174 dockerUrl = T.pack cfgDockerUrl
@@ -260,3 +263,11 @@ instance HasLog (ServerData m) Message m where
260 setLogAction :: LogAction m Message -> ServerData m -> ServerData m
263 setLogAction :: LogAction m Message -> ServerData m -> ServerData m
261 setLogAction newLogAction env = env {logger = newLogAction}
264 setLogAction newLogAction env = env {logger = newLogAction}
262 {-# INLINE setLogAction #-}
265 {-# INLINE setLogAction #-}
269+instance Accept CSV where
270+ contentType Proxy = "text" // "csv"
272+instance Csv.ToRecord a => MimeRender CSV [a] where
273+ mimeRender Proxy = Csv.encode