module Network.AWS.Machines.SpotPrices where
import Lawless hiding (filtered, mapping)
import Network.AWS.EC2
import Network.AWS.Machines.AWS
import Network.AWS.Machines.Types
import Network.AWS.Data.Text (toText)
import Time
import Data.Fixed
import Textual (Textual(..), Printable(..), fromText, hcat, fsep)
import Text
import Machine
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)