Code Monkey home page Code Monkey logo

cloud-stove-ui's Introduction

The Cloud Stove Front End

wercker status

The Cloud Stove gives users deployment recommendations for their cloud applications. Application instances are derived from generic blueprints and enriched with the specific characteristics and requirements of the application to be deployed. Blueprints are generic application scaffolds that represent different application architectures to capture relevant differences in overall deployment strategies. Deployment recommendations are created by optimizing the use of available provider offerings with respect to the captured application specifications and requirements.

Backend: https://github.com/sealuzh/cloud-stove

Quick Start

Head to our developer guide in order to get an overview of the project, and how to get it up and running.

Documentation

Our documentation is being autogenerated using typedoc and can be found on docs.thestove.io.

Contributing

Want to contribute to the Cloud Stove? Awesome! Please check out the contribution guide for details.

The Public Cloud Stove

Every push to the GitHub repository will initiate a build on wercker. The current status of our CI builds (for all branches) is shown below.

Successful CI builds are then deployed to a Heroku pipeline with a staging application at https://staging.frontend.thestove.io. To inspect and modify the staging app's configuration use the application dashboard.

Self-hosted Deployment

The recommended way to deploy Cloud Stove is with Heroku. You can deploy the app using their free dynos and the free PostgreSQL plan for test installations. For production deployments, you should move to paid dynos to prevent your application from sleeping once your free dyno hours are spent.

Deploy

Make sure to set the API_URL config variable for your app to a running backend instance, e.g.:

heroku config:set API_URL=https://api.thestove.io

This would set the public Cloud Stove backend as API endpoint for your frontend installation. While this might be suitable for front end-only development, note that you will not be able to log in with an admin user.

Communication & Organization

Planning and development of the Cloud Stove is coordinated using GitHub issues, milestones, and pull requests.

In the Cloud Stove Roadmap we discuss upcoming features for both, the backend and the frontend, and define milestones and issues to implement them.

Daily communication and coordination happens in #cloud-stove at the s.e.a.l. Slack.

cloud-stove-ui's People

Contributors

dschoeni avatar gmazlami avatar inz avatar joe4dev avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

cloud-stove-ui's Issues

Hierarchical Ingredient Drilldown

As a cloud stove user, I want to see all levels of my application and not only the children of my root-level ingredient, so that I can create complex applications and easily apply constraints where necessary.

Acceptance Criteria:

  • Provide the user with an UI-Element to go deeper/higher in the tree-level of the application
  • Update the interface accordingly to the tree-level, and display only the ingredients corresponding to the level
  • Provide hints to users that ingredients have children, or are childs themselves

Deleting an application breaks list view

  1. Open application list view:

list-view

2) Delete an application - This successfully (i.e., 204) deletes the ingredient

delete

- But then immediately tries to get GET the just deleted ingredient

get

NOTE: The backend now correctly returns a 404 (not found) with an error message instead of a generic 500 (internal server error) since https://github.com/inz/cloud-stove/commit/f2c862b99ca5af4ce3855d10807962bcf9b3118b - => This results in an error because the resource cannot be found. The page remains empty and one needs to reload the entire page to display the other remaining applications.

User_Workload does not get saved

When changing the user workload with the slider, the JSON that is passed to the backend only has the num_simultaneous_users property, but it doesn't have any ìngredient_id, hence on the backend, the user_workload does not get assigned to any ingredient.

See also the screenshots of the chrome debugger:

selection_015
selection_014

Cloud Provider Pricing Overview

Add an overview for compute pricing across providers and regions.

  • Prices shown are for one region area (EU, US, SA, AP)
    • If provider has multiple regions in an area, we can either show a price range or just show the cheapest (or most expensive) resource.
  • For all providers, show all available resources in a sortable table, maybe with two views:
    • one where resources are grouped by provider
    • one where all resources are shown together
  • For sensible sorting, the table should include columns price per VCPU and price per GB RAM.

Optionally, we could also show graphical pricing overview figures, e.g.:

Price per core:
screen shot 2016-10-25 at 9 44 14 am

Price per GB RAM:
screen shot 2016-10-25 at 9 44 45 am

(This will also require some work in the backend, i.e., an endpoint to retrieve all resources for one region area.)

Userback integration (to gather feedback)

Unfortunately, uservoice switched to a weird pricing model with a start price of $199/month. I found Userback, another service to gather feedback from customers. It's not exactly a uservoice replacement, though.

There is a widget that can be integrated into the site like so:

<script>
    Userback = window.Userback || {};

    (function(id) {
        if (document.getElementById(id)) {return;}
        var s = document.createElement('script');
        s.id = id;
        s.src = 'https://app.userback.io/widget.js';
        var parent_node = document.head || document.body;
        parent_node.appendChild(s);
    })('userback-sdk');

    Userback.access_token = '346|400|Z7ztSEbVlSR1b1caiHZIIOncJrfPNDGMKfgDTryfkphvrtFJaF';
</script>

Save component arrangement

As a cloud stove user, I want to rearrange ingredients of applications and the possibility to preserve this state so that I can layout my application as needed.

Acceptance Criteria:

  • When rearranging components, their position should be saved.

Discussion:

We still need some questions answered however how this should be implemented:

  • Where does the information get stored? (client-side vs. server-side)
  • Does rearranging components impact the view for everyone?
  • Can we provide a good default layout, or is the existing pattern good enough?

Disable # of users input while recommendations are generated

Currently, when you hit the 'Generate Recommendations' button, the # of users input remains editable. However, since all change to this field are immediately sent to the backend, it can happen that you change the number of users before the recommendation job runs. In that case, the recommendation is generated for the newly set number of users but the db record will still contain the initially requested number of users.

To circumvent this issue for now, we could just disable the # of users input while recommendations are generated.

Application Editor

We should provide users a graphical overview of their application that is similar to a generic architecture diagram.

  • Ingredients should be displayed as rectangular boxes, in form of normal divs
  • Ingredients should be draggable
  • Dependency-Constraints should be visible as lines between Ingredients
  • A sensible default should be chosen if no layout is set

User/Load Modeling Component

As a cloud stove user, I want to specify load in users and requests of my application, so that this information can be used to calculate growth opportunities and recommendations for different scenarios.

Acceptance Criteria:

  • A user can specify how many users a specific ingredient is able to handle, given its CPU/RAM constraints
  • Also, a user can specify how many requests per time-unit are derived from this number of users in order to determine the bandwidth requirements of this ingredient.

Migrate to Angular 2.0 Final

We should migrate the project to Angular 2.0 final, as the APIs are now seemingly stable and many of the dependencies we have also upped their versions to support the final release. This is a rather big task though, and I guess it makes sense to do it before adding even more features (because this would only lengthen the migration).

Minor layout issue

The Chart.js graphs look really good for browser windows >1200px wide. With a smaller window, it looks like this for me:
graphs fighting for the same spot on the page

This seems to be an issue with vertical clearance, since the graphs overlap less and less the narrower i make my browser window:

some overlap

still a little overlap

no overlap

CPU and RAM-Slider

As a cloud stove user, I want to specify the cpu and ram-requirements of my application and in the future also for individual ingredients, so that I can specify how many cores/ram an application needs to run.

Acceptance Criteria:

  • A user can use a segmented slider with predefined stopts to configure the # of CPU-cores a typical ingredient in this application has. This ranges from 1 to MAX_NUM_CORES
  • Same for RAM
  • These sliders represent a lower bound and get translated intro constraints by the backend, and can thus also be reconstructed from existing constraints.

Minor layout issue

The new theme looks neat but there are some issues when the browser window is <1200px wide.

When the window is wide enough, everything looks ok:
wide enough window. looks ok.

When we reduce the width, the layout starts to break a little:
some elements fighting for the left edge of the screen

When the window gets narrow enough, the layout switches to the stacked view, which looks ok again (except for the spacing):
screen shot 2016-09-02 at 8 25 20 am

Can't change name of application

Currently, there seems to be no way of changing the name of an application (or template).

Either we make it changable inline or we add an edit field on top of the ingredient editor. Or an 'edit' button that shows the edit form for the application/template instead of the ingredient editor.

Can't edit application component

When I try to edit an ingredient, the screen just goes black. For me, this happens locally and also on staging. See screen cap below:

application-editor-error

There is a stack trace in the Javascript console that appears when loading the application view:

[Error] EXCEPTION: Error in ./ApplicationEditorComponent class ApplicationEditorComponent - inline template:75:21
ORIGINAL EXCEPTION: ReferenceError: Can't find variable: Intl
ORIGINAL STACKTRACE:
format@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:21:17284
transform@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:21:14523
[native code]
http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:5:10255
detectChangesInternal
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectContentChildrenChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16536
detectChangesInternal
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectContentChildrenChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16536
detectChangesInternal
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectViewChildrenChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16698
detectChangesInternal@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16365
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectContentChildrenChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16536
detectChangesInternal@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16319
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectViewChildrenChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16698
detectChangesInternal@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16365
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectContentChildrenChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16536
detectChangesInternal@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16319
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectViewChildrenChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16698
detectChangesInternal@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:16365
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:15983
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:7:19030
detectChanges@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:6:30332
http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:2233
forEach@[native code]
tick@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:2184
http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:3:31065
invoke@http://staging.frontend.thestove.io/js/polyfills.1bab6365b66a89d879ef.js:43:16881
onInvoke@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:28547
invoke@http://staging.frontend.thestove.io/js/polyfills.1bab6365b66a89d879ef.js:43:16791
run@http://staging.frontend.thestove.io/js/polyfills.1bab6365b66a89d879ef.js:43:12735
runInner@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:29194
run@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:6151
http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:3:31043
http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:39:17345
__tryOrUnsub@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:18637
next@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:17878
_next@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:16724
next@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:16335
_finalNext@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:10337
_next@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:10177
next@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:9527
emit@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:39:16891
_checkStable@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:5124
onLeave@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:4260
onInvokeTask@http://staging.frontend.thestove.io/js/vendor.1bab6365b66a89d879ef.js:4:28421
invokeTask@http://staging.frontend.thestove.io/js/polyfills.1bab6365b66a89d879ef.js:43:17628
runTask@http://staging.frontend.thestove.io/js/polyfills.1bab6365b66a89d879ef.js:43:13651
invoke@http://staging.frontend.thestove.io/js/polyfills.1bab6365b66a89d879ef.js:43:19186
ERROR CONTEXT:
[object Object]
    __tryOrUnsub (vendor.1bab6365b66a89d879ef.js:4:18699)
    next (vendor.1bab6365b66a89d879ef.js:4:17879)
    _next (vendor.1bab6365b66a89d879ef.js:4:16725)
    next (vendor.1bab6365b66a89d879ef.js:4:16336)
    _finalNext (vendor.1bab6365b66a89d879ef.js:4:10338)
    _next (vendor.1bab6365b66a89d879ef.js:4:10178)
    next (vendor.1bab6365b66a89d879ef.js:4:9528)
    emit (vendor.1bab6365b66a89d879ef.js:39:16892)
    onError (vendor.1bab6365b66a89d879ef.js:4:4502)
    onHandleError (vendor.1bab6365b66a89d879ef.js:4:28996)
    handleError (polyfills.1bab6365b66a89d879ef.js:43:17027)
    runTask (polyfills.1bab6365b66a89d879ef.js:43:13730)
    invoke (polyfills.1bab6365b66a89d879ef.js:43:19187)

Recommendations charts mixes up colors

Microsoft Azure should be blue
and
Amzon should be yellow

In the following example, they change color:

new-azure-basic

:

new-azure-standard

Are the graph colors intended to match the colors of the provider labels at the bottom?
labels

Pricing filter parameters are persisted for other requests

  1. Navigate to pricing overview: http://localhost:1232/pricing
  2. Navigate to another page:
  1. The previous parameters from /pricing are persisted across all pages such as: ?region_area=US&provider_name=Amazon

This issue shouldn't affect any functionality (unless using other parameters?) but is particularly confusing when triggering recommendations because the parameters are ignored there as the payload is relevant for this functionality:
recommendations 132

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.