Coder Social home page Coder Social logo

tobischw / ecs-instance-type-selector Goto Github PK

View Code? Open in Web Editor NEW
2.0 4.0 2.0 14.17 MB

Easily find cheapest AWS configurations and cluster pricing rates, in many different configurations. Written in Elm. SIUE Senior Project.

HTML 2.23% Elm 84.51% JavaScript 8.21% Dockerfile 0.18% CSS 4.87%
elm aws cluster pricing calculator

ecs-instance-type-selector's Introduction

ecs-instance-type-selector

Heroku Deployment

Easily calculate AWS cluster pricing rates, in many different configurations. Written in Elm.

How to build/run

  • First, ensure you have Elm installed.
  • Next, git clone the master branch and cd into it.
  • Make sure you install create-elm-app by doing npm i create-elm-app -g
  • From there, run elm-app start to start the app.

ecs-instance-type-selector's People

Contributors

wpatton97 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

ecs-instance-type-selector's Issues

Start progress on UI mockup for Nathan

We should seriously start looking into best ways to visualize this project to the user. Not only does this include the discussed "tree view"/"bin packing" diagrams suggested by @nathantippy, but also general user experience.

Few questions to consider answering:

  • Services and Tasks input
  • CPU/IO/Memory as sliders/dropdowns/radios etc...
  • Complexity of options - when to hide and when to show
  • Besides visualization, how do we display final configuration? List/table/gallery/etc?
  • UX on how to save progress - localStorage or download JSON etc...

Fix minimum memory and scaling step

During our discussion with Nathan on 4/8 we asked him about the minimum container memory. We currently have it set to 250Mb which he said was way to big.

He said he has seen containers running DSL(Damn Small Linux) only running on a bout 16Mb of RAM, and he said he has also seen lots of containers in the 32-64Mb range, so we need to rethink again how that slider works. We need a way to have totally different memory scalings. I almost think we might need to do the drop-down range idea. Where I dropdown sets the min/max/step of the memory slider.

Understand optimization problem and look at literature/research for algorithms

This is the core of the project and requires thorough research. Naturally, not every algorithm or solution will be able to cover the scope of the entire feature set, but should be good enough for a MVP.

Some general things I've found and think we should investigate:

Fix relative path issue

With the newest tobi-dev and will-dev, containers are viewed using container/{serviceId}/{containerId}. However, all of the resource and url linking is done relative, so when you are viewing a container, the links break, due to only using ../testlink. This needs to be fixed somehow, but is not a super-high priority.

AWS API is returning no results

Related to #61
This is also related to elm-aws-testbed.

The API must have changed in the meantime, ensure we use updated apiVersion and double-check access keys. Update the AWS SDK if required.

Setup Project Formatting in VSCode

Since we will be using differing formatters for elm, we can setup a formatter for the workspace(For Emmet and I) and Tobi can setup a personal formatter for his local vscode config.

Then we need to setup a formatter that runs on commit so all of our code on the remote is in a consistent style.

Better ID assignment

If you add containers with id 0 1 2 and delete id 0, and then add a new container, that one gets id 2, replacing the other one

Integrate playground AWS API/ports with current project

This will be necessary in the future, since we are slowly working our way towards the optimization problem...

There are a couple things to keep in mind here:

  • The playground itself uses create-elm-app, so do we want to integrate it using the .map approach as we have been doing, or do we want the API to not be aware of any state and just return a list of instances? The latter approach may require some refactor of the playground but probably cleaner and easier to work with.

  • Pricing data parsing still does not work, see #12.

  • We may want to create an "intermediary" API, so that our life in the optimization phase will be easier. The reason for this is because the actual API/JSON structure we get back from the AWS API is a total mess and not pretty to work with in Elm.
    For example, we would turn this mess:

type alias ProductsResponse =
    { formatVersion : String
    , priceList : List PriceListing -- Since the repsonse is weird, the ProductList is necessary as an intermediary
    , nextToken : String
    }


type alias PriceListing =
    { product : Product
    , serviceCode : String
    , terms : PricingData
    , version : String
    }

type alias PricingData =
    {
        offerTermCode : String
        , effectiveDate : String
    }    

...

...into something simpler like this:

type alias Instances = List Instance

type alias Instance {
    name : String
   , instanceType : String
   , pricePerHour : Float
   , memory : Int
   , ioops : Int
   , usesEBS : Bool
   , networkBandwidth : Int
   , region : Region
}

This will make the optimization MUCH easier, so something to consider.

Scroll View

The service view should be scroll able in case of many services.

Remove delete option for cluster

Since we only have one top-level cluster, we really don't need the "remove cluster" (trashcan) option for it. If a user currently does delete a cluster, there's no way to add another one to it.

Clean-up nested update logic

Code is a bit messy for this. Needs to be cleaned up, optimized, and/or broken into multiple functions (if possible).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.