machines-amazonka-0.4.0: Source/Library/Network/AWS/Machines/SpotPrices.hs
{-# Language TemplateHaskell #-}
{-|
Module: Network.AWS.Machines.SpotPrices
Description: Stream the spot price history.
Copyright: © 2017 All rights reserved.
License: GPL-3
Maintainer: Evan Cofsky <evan@theunixman.com>
Stability: experimental
Portability: POSIX
-}
module Network.AWS.Machines.SpotPrices where
import Lawless hiding (filtered, mapping)
import Network.AWS.EC2
import Network.AWS.Machines.AWS
import Network.AWS.Data.Text (toText)
import Time
import Data.Fixed
import Textual (Textual(..), Printable(..), fromText, hcat, fsep)
import Text
-- | An 'AWSSourceT' for 'SpotPrice's.
type SpotPriceSourceT m = AWSSourceT m SpotPrice
-- | A 'Process' for transducing 'SpotPrice's to something else.
type SpotPriceProcess b = Process SpotPrice b
-- | A 'Num' instance for representing US Dollars.
newtype Dollars = Dollars {unDollars ∷ Centi}
deriving (Eq, Show, Ord, Enum, Num, Real)
instance Printable Dollars where
print d = hcat ["$", print (unDollars d)]
instance Textual Dollars where
textual = Dollars <$> textual
-- | The hourly spot price at a specific 'Time', 'InstanceType', and
-- 'Zone'.
data PricePoint = PricePoint {
_ppTime ∷ Time -- ^ The time for this price
, _ppInstanceType ∷ InstanceType -- ^ The instance type of this price
, _ppZone ∷ Text -- ^ The zone of this price
, _ppDollars ∷ Dollars -- ^ The hourly price in USD
} deriving (Eq, Ord, Show)
makeLenses ''PricePoint
instance Printable PricePoint where
print (PricePoint {..}) = fsep "\t" [
print _ppTime,
print ∘ toText $ _ppInstanceType,
print _ppZone,
print _ppDollars]
pricePoint ∷ SpotPrice → Maybe PricePoint
pricePoint sp = PricePoint
<$> (review _Time <$> sp ^. sTimestamp)
<*> sp ^. sInstanceType
<*> sp ^. sAvailabilityZone
<*> (sp ^. sSpotPrice >>= fromText)
-- | Streams the historic spot price history for a region.
spotPriceHistory ∷
[RequestMod DescribeSpotPriceHistory]
→ SpotPriceSourceT m -- ^ The spot price history
spotPriceHistory ms =
pagedSource dsphrsSpotPriceHistory ms describeSpotPriceHistory
pricePoints ∷ SpotPriceProcess PricePoint
pricePoints = mapping pricePoint
~> filtered (has _Just)
~> mapping (\(Just m) → m)