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
type SpotPriceSourceT m = AWSSourceT m SpotPrice
type SpotPriceProcess b = Process SpotPrice b
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
data PricePoint = PricePoint {
_ppTime ∷ Time
, _ppInstanceType ∷ InstanceType
, _ppZone ∷ Text
, _ppDollars ∷ Dollars
} 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)
spotPriceHistory ∷
[RequestMod DescribeSpotPriceHistory]
→ SpotPriceSourceT m
spotPriceHistory ms =
pagedSource dsphrsSpotPriceHistory ms describeSpotPriceHistory
pricePoints ∷ SpotPriceProcess PricePoint
pricePoints = mapping pricePoint
~> filtered (has _Just)
~> mapping (\(Just m) → m)