GithubHelp home page GithubHelp logo

manageiq / manageiq-ui-classic Goto Github PK

View Code? Open in Web Editor NEW
49.0 10.0 357.0 131.46 MB

Classic UI of ManageIQ

License: Apache License 2.0

Ruby 61.80% JavaScript 27.05% CSS 0.01% HTML 0.03% Shell 0.02% SCSS 1.39% Haml 9.71%

manageiq-ui-classic's Introduction

ManageIQ::UI::Classic

Gem Version CI Code Climate Test Coverage Coverage Status

Chat

Build history for master branch

ManageIQ UI Classic is the UI that has been split out of the main manageiq repo.

Development Setup

Go to the directory where you have the clone of your 'manageiq' repo.

Next to your 'manageiq' repo create a clone of 'manageiq-ui-classic' repo:

$ git clone [email protected]:ManageIQ/manageiq-ui-classic.git

This way you will have your 'manageiq' and 'manageiq-ui-classic' side-by-side.

At this point you are ready and can start doing PRs against any of the 2 repos.

Or you can get more detailed instructions in ManageIQ/guides.

License

The gem is available as open source under the terms of the Apache License 2.0.

Except where otherwise noted, all ManageIQ source files are covered by the following copyright and license notice:

Copyright (c) 2014-present ManageIQ Authors.

manageiq-ui-classic's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

manageiq-ui-classic's Issues

Decorators needed by the API

some decorators are needed by the API

specifically the VM api endpoints take an optional ?decorators=method_name,method_name to add those fields to the results

used to check for console and cockpit support

Error in Database accordion in Ops

issue moved from previous repository: ManageIQ/manageiq#12745

After selecting "Database" accordion in Ops, I'm getting error message:

[----] F, [2016-11-18T14:26:28.204475 #5149:2ab7ea31b218] FATAL -- : Error caught: [ActionView::Template::Error] undefined method `rows' for nil:NilClass
/home/rblanco/devel/manageiq/app/helpers/ops_helper/textual_summary.rb:130:in `block in vmdb_table_top_rows'
/home/rblanco/devel/manageiq/app/helpers/ops_helper/textual_summary.rb:126:in `collect'
/home/rblanco/devel/manageiq/app/helpers/ops_helper/textual_summary.rb:126:in `vmdb_table_top_rows'
/home/rblanco/devel/manageiq/app/helpers/ops_helper/textual_summary.rb:103:in `textual_vmdb_tables_most_rows'
/home/rblanco/devel/manageiq/app/helpers/textual_summary_helper.rb:16:in `expand_textual_summary'
/home/rblanco/devel/manageiq/app/helpers/textual_summary_helper.rb:39:in `block in expand_textual_group'
/home/rblanco/devel/manageiq/app/helpers/textual_summary_helper.rb:39:in `map'
/home/rblanco/devel/manageiq/app/helpers/textual_summary_helper.rb:39:in `expand_textual_group'
/home/rblanco/devel/manageiq/app/views/shared/summary/_textual_listview.html.haml:1:in `_app_views_shared_summary__textual_listview_html_haml___2864754522922700702_69987596410980'

Seems to be some issue with unmigrate data in the database.
With empty database, it works without any issues.

Error after deleting intermediate snapshot

From @kruge002 on January 17, 2017 15:36

(Euwe) After deleting an intermediate snapshot of multiple snapshots, clicking on 'Snapshots' within the VM details page has no effect. In production.log the error is seen.

Steps to reproduce the issue:

  1. Go to the details page of a VMware VM
  2. Click on 'Snapshots' (see screenshot below)
  3. Add a snapshot
  4. Wait for the completion of the snapshot (refresh details page and observe Snapshots count)
  5. Add a second snapshot
  6. Wait for the completion of the snapshot (refresh details page and observe Snapshots count)
  7. Delete the first snapshot
  8. Wait for the deletion of the first snapshot (refresh details page and observe Snapshots count)
  9. Click on 'Snapshots' on the VM details page
  10. You would expect the Snapshots details page to show but nothing happens and a fatal error is logged to production.log

After logging out and logging in again the snapshots management page is reachable again.

production.log

[----] I, [2017-01-17T16:09:07.479652 #24178:16202a4]  INFO -- : Started POST "/vm_infra/show/1000000000022?display=snapshot_info" for 127.0.0.1 at 2017-01-17 16:09:07 +0100
[----] I, [2017-01-17T16:09:07.523259 #24178:16202a4]  INFO -- : Processing by VmInfraController#show as JS
[----] I, [2017-01-17T16:09:07.523409 #24178:16202a4]  INFO -- :   Parameters: {"authenticity_token"=>"oF2W8IHE20Bk0azZOdWGCjbmpAjF/qmsZUpnRJxC/bpCv71RV8Y+iioXyzoIyjbynAIimbDceNr68IUwwsAxYw==", "display"=>"snapshot_info", "id"=>"1000000000022"}
[----] I, [2017-01-17T16:09:07.622176 #24178:16202a4]  INFO -- :   Rendered layouts/_flash_msg.html.haml (0.1ms)
[----] I, [2017-01-17T16:09:07.633864 #24178:16202a4]  INFO -- :   Rendered vm_common/_snapshots_desc.html.haml (6.5ms)
[----] I, [2017-01-17T16:09:07.634002 #24178:16202a4]  INFO -- :   Rendered vm_common/_config.html.haml (16.6ms)
[----] F, [2017-01-17T16:09:07.634234 #24178:16202a4] FATAL -- : Error caught: [ActionView::Template::Error] Couldn't find Snapshot with 'id'=1000000000022
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/core.rb:173:in `find'
/var/www/miq/vmdb/app/views/vm_common/_snapshots_desc.html.haml:5:in `_app_views_vm_common__snapshots_desc_html_haml___319794043838976554_233122420'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:158:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:166:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:348:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:156:in `render'

2017-01-17_16h24_24

Copied from original issue: ManageIQ/manageiq#13540

Tenant admin can create groups for other tenants

When logging in as tenant admin (role "EVM Tenant admin" in tenant test1)

2017-01-11 22_28_26-microsoft excel - book1

It is posible to create groups for te root tenant and for other tenants (test2). (The API handles this correctly, rejecting these actions)

Unify the layout of HTML5 remote console windows

The current HTML5-based remote consoles are displayed differently depending on technology. My idea is to unify these layouts into a single one and use it appliance-wide.

The new layout should display:

  • VM name and/or IP address
  • Remote console type (VNC/SPICE/etc)
  • Connection status (Connecting/Connected/Disconnected)
  • Send Ctrl+Alt+Del
  • Toggle fullscreen

We experimented a bit with @romanblanco and this is our proposed mockup:
screenshot from 2017-01-16 14-12-00

@dclarizio @epwinchell what do you guys think?

Unable to save filter with the same name and different type

There are some issues regarding saving filters in Advanced Search:

Let's load an existing default filter (type "default") under Global Filters.
Then if we want to save the filter with the same name as a filter which is not global (in My Filters; "Global search" unchecked before saving), it allows us to save a filter normally and the new filter appears under My Filters.
If we click on "Save" button again, it allows us to save the same filter again, but no more filters with the name appear in the tree.
It looks like the existing filter was just edited and saved.
BUT when we were creating a new filter, we were clicking on the same button, on "Save".
It is not always clear if we create a new filter or if we edit the existing one. Or is it a bug?

Let's create and save a new global filter in Advanced Search (expression editor).
Let's use the filter (load).
Then if we want to save the filter with the same name as a filter which is not global (in My Filters; "Global search" unchecked before saving, it throws an error "Name has already been taken", even if we have nothing under My Filters.
Is it a bug or ...?
Aren't we allowed to have two created filters in the tree (one in Global Filters and one in My Filters)? If yes, then why are we allowed to do this when using default filters?

The question is: how should Advanced Search work? How does user know if he/she creates a new filter or just edits the existing one when clicking on "Save" button in expression editor (in the same place where existing/new name has to be added to the filter)? What is a bug and what isn't?

This behavior is not consistent but it could be fixed for example by adding a new "Save as" button to Advanced Search:

  • if user clicked on "Save" button, the selected (or loaded) filter would be just changed (if there is some filter loaded)
  • if user clicked on "Save as" button, a new filter would be created and saved.
    Or some additional info should be there when saving a filter, info about if we are going to save a new filter or edit the existing one.

Comparison of strings that need to be i18n

app/controllers/application_controller/compare.rb

drift_record_nonexistmode(idx, match, val, basval) and drift_record_existmode(idx, val, basval) are comparing strings("Found") that are part of UI.

Move the product/views to the classic UI repo

as requested by @chessbyte in ManageIQ/manageiq#13579

Goal:

  • The definition files will be moved.
  • Everything will carry on working as now. Meaning that the report infrastructure will be used to feed the GTL lists as before.

Notes:

  • we should also move the related code that is only used by the UI
  • there are duplicate files in the directory need to cleanup that too (see #1356 (comment))

Looking forward notes:

  • GTL component is to be replaced with an Angular one.
  • The new component will consume API endpoints serving the report data.

Adding group as superadmin causes stack trace and keeps the Add button greyed out

While attempting to add a group as admin/smartvm, entering the new group name, the role and a tenant selected, the Assign filters tabs are kept unpopulated and the Add button is kept greyed out.

The stack trace seen is:

[----] F, [2017-01-19T15:59:07.507518 #25640:3fef8c67acf8] FATAL -- : Error caught: [RuntimeError] Invalid tenant selected.
/Users/abellotti/.gem/ruby/2.2.5/bundler/gems/manageiq-ui-classic-f8f252b4b4b3/app/controllers/ops_controller/ops_rbac.rb:1049:in `rbac_group_get_form_vars'
/Users/abellotti/.gem/ruby/2.2.5/bundler/gems/manageiq-ui-classic-f8f252b4b4b3/app/controllers/ops_controller/ops_rbac.rb:796:in `rbac_field_changed'
/Users/abellotti/.gem/ruby/2.2.5/bundler/gems/manageiq-ui-classic-f8f252b4b4b3/app/controllers/ops_controller/ops_rbac.rb:254:in `rbac_group_field_changed'
/Users/abellotti/.gem/ruby/2.2.5/gems/actionpack-5.0.1/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
/Users/abellotti/.gem/ruby/2.2.5/gems/actionpack-5.0.1/lib/abstract_controller/base.rb:188:in `process_action'
/Users/abellotti/.gem/ruby/2.2.5/gems/actionpack-5.0.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
/Users/abellotti/.gem/ruby/2.2.5/gems/actionpack-5.0.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'

In my Tenant pull down I see:

Projects
My Company/My Sub Company/My Sub-Sub Company/My Project

Tenants
My Company
My Company/My Sub Company
My Company/My Sub Company/My Sub-Sub Company
My Company/child_tenant

I am picking My Company

my tenants:


id: 1 
name: My Company 
description: Tenant for My Company 
ancestry:  
divisible: true 
default_miq_group_id: 1

id: 2 
name: My Sub Company 
description: First sub-company for My Company 
ancestry: 1 
divisible: true 
default_miq_group_id: 17

id: 3 
name: My Sub-Sub Company 
description: Second sub-company of My Company 
ancestry: 1/2 
divisible: true 
default_miq_group_id: 18

id: 4 
name: My Project 
description: First project for my sub-sub company 
ancestry: 1/2/3 
divisible: false 
default_miq_group_id: 19

id: 5 
name: child_tenant 
description: Child Tenant 
ancestry: 1 
divisible: true 
default_miq_group_id: 42

Tenant.tenant_and_project_names returns:

[[["My Company", 1], ["My Company/My Sub Company", 2], ["My Company/My Sub Company/My Sub-Sub Company", 3], ["My Company/child_tenant", 5]], [["My Company/My Sub Company/My Sub-Sub Company/My Project", 4]]]

though looking at the valid_tenant? method, I'm not sure all_tenants.include?(tenant_id) would work.
might need all_tenants.flatten.include?(tenant_id)

A tenant admin can create a user with role EvmRole-super_administrator

#A tenant admin (role EvmRole-tenant_administrator, member of a none root tenant) can create a group for the tenant with the role EvmRole-super_administrator and a user in this group.

This user suddenly gain system level privileges that are way beond the scope of a none root tenant member, for example changing schedules or disable a entire appliance.
su

Btw. This is also possible using the API.

Rename Ansible Vendor image

Rename "vendor-ansible_tower_automation.svg" to "vendor-ansible.svg"

The idea is to keep vendor images named as simply as possible. There's a tendency to copy images for other purposes once the names become too descriptive. This the case with many of the others vendor images.

This is a follow-up to: #170

Remove item.html.haml

Some entities don't use textual summary, but instead call this strange partial:

app/views/layouts/_item.html.haml

This is a mess and an exception and we need to get rid of it.

Task: remove this partial, use textual summary where possible instead. Create a special partial per entity, if/where it's not possible to use textal summar and place is under app/views/<entity/.

Get rid of _main.html.haml

Related to #163 where I need to get rid of the show.html.haml partials I need to get rid of _main.html.haml partials too.

This is also a necessary step toward being able to server the TextualSummaries through an API.

A typical _main.html.haml looks like this:

= render :partial => "layouts/flash_msg"                                                            
.row                                                                                                
  .col-md-12.col-lg-6                                                                               
    = render :partial => "shared/summary/textual", :locals => {:title => _("Properties"), :items => textual_group_properties}
  .col-md-12.col-lg-6                                                                               
    = render :partial => "shared/summary/textual_tags", :locals => {:title => _("Smart Management"), :items => textual_group_tags}
  .col-md-12.col-lg-6                                                                               
    = render :partial => "shared/summary/textual", :locals => {:title => _("Relationships"), :items => textual_group_relationships}

So the information we have here are:

  1. what method to call textual_group_properties
  2. label associated with this mehod _("Properties")
  3. template (textual in most cases, and textual_tags once per each file)
  4. grouping to columns

Let's replace this with:

    def textual_groups                                                                                
      [                                                                                               
        %i(textual_group_properties textual_group_status) + @record.respond_to?(:arbitration_profiles) ? %i(textual_group_configuration_relationships) : [],
        %i(textual_group_relationships textual_group_topology textual_group_smart_management)         
      ]                                                                                               
    end   

This is a complex case where there's a condition, most will be just simple array of %i(...).

And the textual_grou_something would change from:

  def textual_group_properties                                                                      
    %i(name type status)
  end 

to

  def textual_group_properties                                                                      
    TextualGroup.new(_('Properties'), %i(name type status))
  end 

and

 def textual_tags
   TextualGroupTags.new( _("Smart Management"), %(tags))
 end

This way we can delete ~60 files from the sources, simplify work on #163 and be one step closer to serving the textual summaries through the API.

Add New Provider page is slow

E.g. GET for /ems_container/new takes 3โ€“9 seconds โ€” before loading any linked assets!
Is it "standard developement mode slowness"? Feels unreasonable for just loading an empty form, would like to understand.

Might be result of sharing logic for all provider types (selected by ng-if)?
it shows some unrelevant DB queries for Openstack, but those are quick don't explain the slowness.

Then tons of assets get loaded more or less in parallel,
then there is ~5sec gap (I suppose JS runs?),
then it requests OpenSans, /api/notifications and several notifications .htmls,
and finally /ems_container/ems_container_form_fields/new โ€” ideally should happen early, not sure if blocks rendering.

Around that time, timeline shows couple >1second "Parse HTML" which actually constists of running JS -> miqBootstrap...

[----] D, [2017-01-04T16:23:33.151067 #13684:2aabaf6240f0] DEBUG -- : PostgreSQLAdapter#log_after_checkin, connection_pool: size: 5, connections: 5, in use: 0, waiting_in_queue: 0
[----] D, [2017-01-04T16:23:34.738222 #13684:3faf3a003f24] DEBUG -- : PostgreSQLAdapter#log_after_checkout, connection_pool: size: 5, connections: 5, in use: 1, waiting_in_queue: 0
[----] I, [2017-01-04T16:23:34.739324 #13684:3faf3a003f24]  INFO -- : Started GET "/ems_container/new" for ::1 at 2017-01-04 16:23:34 +0200
[----] I, [2017-01-04T16:23:34.881941 #13684:3faf3a003f24]  INFO -- : Processing by EmsContainerController#new as HTML
[----] D, [2017-01-04T16:23:34.909980 #13684:3faf3a003f24] DEBUG -- :   User Load (3.9ms)  SELECT  "users".* FROM "users" WHERE ("users"."id" BETWEEN $1 AND $2) AND "users"."userid" = $3 LIMIT $4  [["id", 0], ["id", 999999999999], ["userid", "admin"], ["LIMIT", 1]]
[----] D, [2017-01-04T16:23:34.914627 #13684:3faf3a003f24] DEBUG -- :   User Inst Including Associations (1.8ms - 1rows)
[----] D, [2017-01-04T16:23:34.927031 #13684:3faf3a003f24] DEBUG -- :   MiqGroup Load (2.2ms)  SELECT  "miq_groups".* FROM "miq_groups" WHERE "miq_groups"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
[----] D, [2017-01-04T16:23:34.930932 #13684:3faf3a003f24] DEBUG -- :   MiqGroup Inst Including Associations (2.4ms - 1rows)
[----] D, [2017-01-04T16:23:34.947414 #13684:3faf3a003f24] DEBUG -- :   Tenant Load (1.7ms)  SELECT  "tenants".* FROM "tenants" WHERE "tenants"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
[----] D, [2017-01-04T16:23:34.948427 #13684:3faf3a003f24] DEBUG -- :   Tenant Inst Including Associations (0.4ms - 1rows)
[----] D, [2017-01-04T16:23:34.962532 #13684:3faf3a003f24] DEBUG -- :   MiqUserRole Load (1.3ms)  SELECT  "miq_user_roles".* FROM "miq_user_roles" INNER JOIN "entitlements" ON "miq_user_roles"."id" = "entitlements"."miq_user_role_id" WHERE "entitlements"."miq_group_id" = $1 LIMIT $2  [["miq_group_id", 2], ["LIMIT", 1]]
[----] D, [2017-01-04T16:23:34.966377 #13684:3faf3a003f24] DEBUG -- :   MiqUserRole Inst Including Associations (1.5ms - 1rows)
[----] D, [2017-01-04T16:23:34.984036 #13684:3faf3a003f24] DEBUG -- :   MiqProductFeature Load (4.5ms)  SELECT "miq_product_features".* FROM "miq_product_features" INNER JOIN "miq_roles_features" ON "miq_product_features"."id" = "miq_roles_features"."miq_product_feature_id" WHERE "miq_roles_features"."miq_user_role_id" = $1  [["miq_user_role_id", 1]]
[----] D, [2017-01-04T16:23:34.987674 #13684:3faf3a003f24] DEBUG -- :   MiqProductFeature Inst Including Associations (2.3ms - 1rows)
[----] D, [2017-01-04T16:23:35.009070 #13684:3faf3a003f24] DEBUG -- :   Zone Load (3.6ms)  SELECT "zones".* FROM "zones" ORDER BY lower(description)
[----] D, [2017-01-04T16:23:35.009768 #13684:3faf3a003f24] DEBUG -- :   Zone Inst Including Associations (0.2ms - 1rows)
[----] D, [2017-01-04T16:23:35.012825 #13684:3faf3a003f24] DEBUG -- :    (0.4ms)  SELECT "providers"."name", "providers"."id" FROM "providers" WHERE "providers"."type" IN ('ManageIQ::Providers::Openstack::Provider')
[----] D, [2017-01-04T16:23:35.034810 #13684:3faf3a003f24] DEBUG -- :   CACHE (0.4ms)  SELECT "zones".* FROM "zones" ORDER BY lower(description)
[----] D, [2017-01-04T16:23:35.035476 #13684:3faf3a003f24] DEBUG -- :   Zone Inst Including Associations (0.1ms - 1rows)
[----] D, [2017-01-04T16:23:35.047611 #13684:3faf3a003f24] DEBUG -- :   ManageIQ::Providers::Openstack::Provider Load (2.0ms)  SELECT "providers".* FROM "providers" WHERE "providers"."type" IN ('ManageIQ::Providers::Openstack::Provider') ORDER BY lower(name)
[----] D, [2017-01-04T16:23:35.050584 #13684:3faf3a003f24] DEBUG -- :   ManageIQ::Providers::Openstack::Provider Inst Including Associations (0.1ms - 0rows)
[----] I, [2017-01-04T16:23:35.059027 #13684:3faf3a003f24]  INFO -- :   Rendering /home/bpaskinc/miq/manageiq-ui-classic/app/views/ems_container/new.html.haml within layouts/application
[----] I, [2017-01-04T16:23:35.061917 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_flash_msg.html.haml (0.1ms)
[----] I, [2017-01-04T16:23:35.067094 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_endpoints_angular.html.haml (1.7ms)
[----] I, [2017-01-04T16:23:35.071626 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_form_buttons_verify_angular.html.haml (0.5ms)
[----] I, [2017-01-04T16:23:35.071957 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_auth_credentials_angular_bootstrap.html.haml (3.4ms)
[----] I, [2017-01-04T16:23:35.076233 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_form_buttons_verify_angular.html.haml (0.5ms)
[----] I, [2017-01-04T16:23:35.076519 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_auth_service_account_angular.html.haml (3.3ms)
[----] I, [2017-01-04T16:23:35.084601 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_endpoints_angular.html.haml (6.5ms)
[----] I, [2017-01-04T16:23:35.093502 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_endpoints_angular.html.haml (3.0ms)
[----] I, [2017-01-04T16:23:35.096510 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_form_buttons_verify_angular.html.haml (0.3ms)
[----] I, [2017-01-04T16:23:35.096792 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_auth_credentials_angular_bootstrap.html.haml (1.9ms)
[----] I, [2017-01-04T16:23:35.100037 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_form_buttons_verify_angular.html.haml (0.4ms)
[----] I, [2017-01-04T16:23:35.100335 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_auth_credentials_angular_bootstrap.html.haml (2.2ms)
[----] I, [2017-01-04T16:23:35.110479 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_form_buttons_verify_angular.html.haml (1.0ms)
[----] I, [2017-01-04T16:23:35.114273 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_auth_credentials_angular_bootstrap.html.haml (9.3ms)
[----] I, [2017-01-04T16:23:35.124857 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular-bootstrap/_endpoints_angular.html.haml (3.6ms)
[----] I, [2017-01-04T16:23:35.131805 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_form_buttons_verify_angular.html.haml (1.3ms)
[----] I, [2017-01-04T16:23:35.133796 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_multi_auth_credentials.html.haml (69.7ms)
[----] I, [2017-01-04T16:23:35.140605 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/angular/_x_edit_buttons_angular.html.haml (2.6ms)
[----] I, [2017-01-04T16:23:35.141532 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/ems_container/_form.html.haml (80.5ms)
[----] I, [2017-01-04T16:23:35.144816 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/ems_container/new.html.haml within layouts/application (85.1ms)
[----] I, [2017-01-04T16:23:35.152028 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_doctype.html.haml (0.5ms)
[----] I, [2017-01-04T16:23:35.668647 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/stylesheets/_template50.html.haml (0.1ms)
[----] I, [2017-01-04T16:23:37.613053 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_i18n_js.html.haml (0.5ms)
[----] I, [2017-01-04T16:23:37.631720 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_about_modal.html.haml (12.3ms)
[----] D, [2017-01-04T16:23:37.662229 #13684:3faf3a003f24] DEBUG -- :   MiqGroup Load (5.0ms)  SELECT "miq_groups".* FROM "miq_groups" INNER JOIN "miq_groups_users" ON "miq_groups"."id" = "miq_groups_users"."miq_group_id" WHERE "miq_groups_users"."user_id" = $1  [["user_id", 1]]
[----] D, [2017-01-04T16:23:37.666294 #13684:3faf3a003f24] DEBUG -- :   MiqGroup Inst Including Associations (2.5ms - 1rows)
[----] I, [2017-01-04T16:23:37.670259 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_user_options.html.haml (26.2ms)
[----] I, [2017-01-04T16:23:37.671624 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_spinner.html.haml (0.1ms)
[----] I, [2017-01-04T16:23:37.672949 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_lightbox_panel.html.haml (0.1ms)
[----] I, [2017-01-04T16:23:37.676480 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_notifications_drawer.html.haml (1.0ms)
[----] I, [2017-01-04T16:23:37.680316 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_toast_list.html.haml (0.4ms)
[----] I, [2017-01-04T16:23:37.681372 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_header.html.haml (64.7ms)
[----] D, [2017-01-04T16:23:37.719558 #13684:3faf3a003f24] DEBUG -- :    (3.2ms)  SELECT "ext_management_systems"."id" FROM "ext_management_systems" WHERE "ext_management_systems"."type" IN ('ManageIQ::Providers::Openstack::InfraManager')
[----] D, [2017-01-04T16:23:37.726315 #13684:3faf3a003f24] DEBUG -- :   CACHE (0.3ms)  SELECT "ext_management_systems"."id" FROM "ext_management_systems" WHERE "ext_management_systems"."type" IN ('ManageIQ::Providers::Openstack::InfraManager')
[----] I, [2017-01-04T16:23:37.761911 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_vertical_navbar.html.haml (75.2ms)
[----] I, [2017-01-04T16:23:37.764116 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_breadcrumbs.html.haml (0.1ms)
[----] I, [2017-01-04T16:23:37.768922 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_tabs.html.haml (0.8ms)
[----] I, [2017-01-04T16:23:37.771488 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_content.html.haml (86.9ms)
[----] I, [2017-01-04T16:23:37.779658 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_adv_search.html.haml (0.5ms)
[----] I, [2017-01-04T16:23:37.820526 #13684:3faf3a003f24]  INFO -- :   Rendered /home/bpaskinc/miq/manageiq-ui-classic/app/views/layouts/_footer.html.haml (44.8ms)
[----] D, [2017-01-04T16:23:44.590627 #13684:3faedcd83c0c] DEBUG -- : PostgreSQLAdapter#log_after_checkout, connection_pool: size: 5, connections: 5, in use: 3, waiting_in_queue: 0
Session:	 Hash of Size 11809, Elements 31
=================================[----] I, [2017-01-04T16:23:44.616863 #13684:3faedcd83c0c]  INFO -- : Finished "/ws/notifications" [WebSocket] for ::1 at 2017-01-04 16:23:44 +0200
[----] I, [2017-01-04T16:23:44.618004 #13684:3faedcd83c0c]  INFO -- : NotificationChannel stopped streaming from notifications_1
[----] D, [2017-01-04T16:23:44.618467 #13684:3faf3a003e98] DEBUG -- : PostgreSQLAdapter#log_after_checkout, connection_pool: size: 5, connections: 5, in use: 3, waiting_in_queue: 0
[----] D, [2017-01-04T16:23:44.619814 #13684:3faedcd83c0c] DEBUG -- : PostgreSQLAdapter#log_after_checkin, connection_pool: size: 5, connections: 5, in use: 2, waiting_in_queue: 0
[----] I, [2017-01-04T16:23:44.628717 #13684:3faf3a003e98]  INFO -- : Started GET "/ws/notifications" for ::1 at 2017-01-04 16:23:44 +0200

[----] I, [2017-01-04T16:23:44.796030 #13684:3faf3a003f24]  INFO -- : Completed 200 OK in 9912ms (Views: 2756.9ms | ActiveRecord: 28.5ms)

@miq-bot add-label performance

Separate Cloud and Infra Stacks controller/list

From @sseago on November 14, 2016 15:59

When Ansible jobs were implemented, the Orchestration Stacks controller was modified to only show Cloud Stacks. This inadvertently broke the Infra Stacks UI sinceshow page threw an error for an Infra stack since it wasn't a Cloud Stack. As a short term fix, ManageIQ/manageiq#12569 modifies the Orchestration Stacks controller to show both Infra and Cloud stacks. The problem with this is that now Infra stacks show up under Compute->Cloud->Stacks.

We need to split the OrchestrationStacksController class into separate Cloud and Infra controllers. The implementation will probably leave the bulk of the implementation in the current base class and create Cloud and Infra subclasses to override names, paths, types, etc.

Copied from original issue: ManageIQ/manageiq#12617

Deduplicate app/controllers/vm_common.rb by using MoreShowMixins

For some of the methods the code is the same.

I see a problem with 'show_timeline':

  1. seems that the URL generated there for breadrumb is wrong -- it contains db that comes from get_rec_cls and that returns a class.
  2. some of the show_timeline methods call find_by_id_filtered that should be probably called everywhere instead
  3. there are a bunch of alianses (such as :image_timeline,, some are used from toolbars)
  4. there's extra code to deal with @explorer being true

warning: if inside a module A you use:

included do
  include Mixins::MoreShowMixins
end

and then try to redefine a method from MixingsMoreShowMixins, you'll fail as the method from the included mixin will get called, not the one in module A.

When done, look at app/controllers/container_controller.rb it also has it's implementation of the methods from MoreShowMixins but slightly differently arranged.

Don't reload the whole page on click (non-explorer screens)

Don't reload the whole page on click.

To start we would like to keep the menu and top bar in place.

Notes:

  • we start by reloading the whole center_div
  • we start by doing so for the controllers using the Generic{Show,List}Mixin
  • we'll send a XHR GET request and send back first javascript and later JSON using pattern similar to the ExplorerPresenter
  • once we have the whole center_div reload we can reload the main area separately and the left accordion separately
  • together with @karelhala's GTL we'll stop reloading on GTL requests
  • together with @himdel and @mzazrivec when we have the nested routes we will be only reloading the main area or the left accordion as needed
  • further in the future we can connect the textual summaries to the API. There are already some properties for some entities displayed in the SSUI so let's look at that and make an Angular component if needed.

Problems:

  • the show partial are a mess
  • cannot render partial with layout

[WIP] Angular 2 Migration Preparation(Draft)

From @mtho11 on December 13, 2016 4:17

Purpose

The purpose of this issue is to identify the tasks need for Angular 2 migration. So we can identify task dependencies and blockers and also split up the work on these individual tasks.
At this time, this is a living document so feel free to add items or elaborate or question tasks.

This is an open task for anyone to contribute, so we can just start to get our hands around all the migration issues and create a plan.

Tasks

  • 1. NPM packaging (replacing bower)
  • * Yarn (via 5.1+ --yarn option) is probably a better replacement (and it is already based on npm packages) since Rails 5.1+ uses it by default as dependency management (and it handles both bower and npm) possible replacement with yarn since it handles both bower and npm?
  • 3. Webpack packaging (for production build)
    • * Phase 1: custom webpack solution for fine release
    • * Phase 2: solved by webpacker and Rails 5.1+
  • 4. Configure dev server strategy for web app auto-reload for quick development (webpack dev-server perhaps?) -- solved by webpacker ?
  • 5. NgModules structure (what ngModules will we have? (common/feature/provider)
  • 6. Directory structure (do we wish to change the organization of things)
  • 7. Assets (do we handle assets differently with webpack (because we can))
  • 8. Do we use Rails Sprockets (asset pipeline) or not (with webpack)?
  • 9. Do Websockets via cable still work in ng2?
  • 10. Can we use ng-cli?
  • 11. Rx.js version moves from 4 to 5 with ng2 and the syntax changes quite a bit
    • Does our limited existing ngrx stuff still work?
  • 12. Angular Routing (we use routing minimally)
  • 14. I18n (gettext_i18n_rails_js for ng2?)
  • 15. Is there issues with some of the javascript 3rd party libraries (which there are many)
  • 16. Use ng2 Ahead-of-time compile(AOT) for production use (saves ~40% on ng2 libs and equally on startup time; since there is no ng 'compile' at runtime as is usual)

Recommendation

Use Rails 5.1+ for both webpack and Yarn (via webpacker) to make their way into Rails as a standard. This should not stop prototypes(using the above solutions), just that we donโ€™t want to create a non-standard solution for the future.

Starting with ngUpgrade for an interim period should provide a less painful path forward as both Angular 1 and Angular 2 can coexist (albeit at a cost of both runtimes); until everything can be fully converted to Angular 2.

Angular 1.x Best Practices (TBD)

This is probably best off in its own issue as it could be lengthy and have many of its own conversations. (This may not be needed given that we need to migrate to ng2 and the ng1 stuff will exist for a short time period) I cannot compete wtih what is already out there:

Next

Surely, there are things missing here, as the migration is large and complex, however, this should serve as a starting place. Please edit as needed so we can divide these up and conquer.

Copied from original issue: ManageIQ/manageiq#13131

Angular: Remove all references to `$http success/error` in favor of `$http.then()`

This issue is migrated from manageiq repo to manageiq-ui-classic. Old issue was closed: ManageIQ/manageiq#13127

Starting with Angular version 1.6 the (deprecated) $http .success and .error has been removed and will throw errors.

Angular Github PR

This means we need search and replace any instances of this and replace with promise syntax:
$http.then(function(){ }) instead.
Also, need to check javascript tests. This needs to be done before moving to Angular 1.6.

Just FYI, from style guide - Handling Exceptions with Promises - https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#style-y082

@miq-bot add_label technical debt
@miq-bot assign @himdel
CC @AparnaKarve

i18n: Untranslated (& unextracted) tab headings and labels in the Request workflow dialog

screen shot 2017-01-17 at 2 13 16 pm

I came across this while working on the Request workflow SUI parity PR ManageIQ/manageiq-ui-service#414.

It looks like the yaml strings under product/dialogs/miq_dialogs are not getting extracted for translation. I think we already have a mechanism to extract yaml strings, so maybe we also need to take into account the yamls under product/dialogs/miq_dialogs.

@mzazrivec Please review.
If it's a non-issue or an oversight from my end, feel free to close this.
Thanks.

โ€œShow full screen Reportโ€ don't work correctly

At a fresh ManageIQ start, after logging in, go straight to "Cloud Intel -> Reports". Under "All Saved Reports", Checkout one of the reports on the right, and choose "Show full screen Report". There are some problems.

  1. The saved report prompts "isn't generated yet". When you open any report and redo the things(Under "All Saved Reports", Checkout one of the reports on the right, and choose "Show full screen Report"), it works normal. But
  2. Whichever report you checkout, the full screen result is last report you just opened.

I have tried to fix, but it comes other problems...

Support fonticons in quadicons

Right now, quadicons (or at least single quads), need an image and aren't ready to handle fonticons quite yet.

Since we're gradually moving towards fonticons or svgs everywhere, we should support them in quadicons as well.

Specific button classes in summary view

Now when we build toolbars buttons, we are checking some properties on instance variables like @record. But for summary screens this could cause that some button are hidden.

Because context provided by controller is not always present in summary screens and when it is,it is related to some superior entity like Provider.

So we should identify these cases where we falsely hiding button because there is no @record and remove specific button classes , which require instance variables from summary view.

#143
@romanblanco

Broken icons in Automate Explorer

Go to Automation > Explorer (/miq_ae_class/explorer) (Datastore accordion)

a)
Click on a Domain - the list of namespaces under it has empty icon - uses product product-ae_namespace

b)
Click on a Namespace - the list of sub-namespaces has the same problem

c)
Click on an Automate Class - Instances tab - the list of instances has empty squares - uses product product-ae_instance (also visible in the tree)

@epwinchell I guess this one is yours ;)

Expression Expression editor gets into unresponsive state

There appears to be some regression in the expression editor.

To illustrate, here I'm about to add a filter to the Compute/Infrastructure/Vms page:

manageiq_virtual_machines_-_2017-01-09_10 09 52

Here I've created a valid expression:

manageiq_virtual_machines_-_2017-01-09_10 10 15

However, on clicking the tick, nothing happens.

I'm using Firefox in the example above. I've tried using other browsers (Chromium, GNU Web) with a little more luck, but after successfully adding an expression to say the Reports filter tab, I'm unable to edit it (I can create the expression, but clicking on the tick fails to update).

/cc @AparnaKarve
Duplicate of ManageIQ/manageiq#13411

Storage tab/menu missing from latest 5.8 nightly-20170210194805

If you click on this menu item it takes you to Unexpected error encountered
Errors in Management Engine can be caused by:

โ‘  Accessing Management Engine from multiple tabs or windows of the same browser on a single machine. Close any duplicate browser sessions, then select an option from the menu.
โ‘ก Pressing the back button during a session.
Close any duplicate browser sessions, then select an option from the menu.
โ‘ข An internal system error.
Please contact your administrator for assistance.

Error text:

Cannot redirect to nil! [dashboard/maintab]

Allow multi-select on Drop Down List elements

One would like to select multiple items from a Drop Down List element, like it is available for Tag Control element when 'Single select' is unchecked. This would allow for example to select multiple entries from a dynamic list.

Another implementation could be Check Box Group element that would allow to select multiple values, maybe with min and max limit.

Error in Expression Editor

After commiting the search expression and pressing Apply button, I'm getting this error:

[----] F, [2017-02-13T17:45:25.419068 #437:2ab64e83320c] FATAL -- : Error caught: [ActionView::Template::Error] undefined method `split' for nil:NilClass
/home/rblanco/devel/manageiq/lib/miq_expression.rb:1412:in `get_entry_details'
/home/rblanco/devel/manageiq/plugins/manageiq-ui-classic/app/views/layouts/_user_input_filter.html.haml:22:in `block in _plugins_manageiq_ui_classic_app_views_layouts__user_input_filter_html_haml__3558684801824572058_46962497257780'
/home/rblanco/devel/manageiq/plugins/manageiq-ui-classic/app/views/layouts/_user_input_filter.html.haml:16:in `each'
/home/rblanco/devel/manageiq/plugins/manageiq-ui-classic/app/views/layouts/_user_input_filter.html.haml:16:in `_plugins_manageiq_ui_classic_app_views_layouts__user_input_filter_html_haml__3558684801824572058_46962497257780'

screencast from 2017-02-13 17-45-13

/cc @mshriver

Circular dependency in development setup caused by Gemfile.dev.rb

The current solution of loading a local classic UI repo in ManageIQ causes a circular dependency when running bundle update in the classic UI repo.

To fix this, it is necessary to wrap the line responsible for loading the UI in manageiq/Gemfile.dev.rb:

unless dependencies.detect { |d| d.name == "manageiq-ui-classic" }
  gem "manageiq-ui-classic", :path => "....."
end

@himdel could you please update the guides about it?

Clean up table & #buttons_on for angular button partials

Right now, wherever app/views/layouts/angular/_x_edit_buttons_angular.html.haml or app/views/layouts/angular/_x_custom_form_buttons_angular.html.haml are included, there's always a...

  %table{:width => '100%'}
    %tr
      %td{:align => 'right'}
        #buttons_on
          = render :partial => "layouts/angular/x_edit_buttons_angular"

..so .. using a table for styling instead of CSS
.. aand repeating it in ~50 partials

Needs to be fixed :).

Unify paging partials

app/views/layouts/_saved_report_paging_bar.html.haml and app/views/layouts/_x_pagingcontrols.html.haml share a lot.

And there's logic around that that need not be there if we used the same code.

The task is to cleanup this by removing one of the 2 or by using one from the other is short deduplicate.

Virtual Machines under Provider paginator breaks.

  1. Set up a provider (I used vSphere 5.5) and refresh it. Make sure it has some VMs in it
  2. Open Compute / Infra / Providers
  3. Open the provider details
  4. Click on the Virtual Machines relationship (on euwe it is VMs and Instances. IT IS THE RELATIONSHIP WITH NUMBER, DO NOT MISTAKE IT WITH THE ONE ON TOP)
  5. A page with the VMs opens
  6. Click on the "next" icon on the paginator to go to page 2
  7. A rails error appears:
The change you wanted was rejected.

Maybe you tried to change something you didn't have access to.

Version: master.20170110084925_dd72efa
It seems to work normally in euwe

Error viewing hardware tab for a provisioning request submitted through the API

When provisioning a VM using the provisioning API (/api/provision_requests/) with some basic values:

{  
   "version":"1.1",
   "template_fields":{  
      "name": "Red Hat Enterprise Linux 6 (64-bit)"
   },
   "vm_fields":{
      "number_of_vms":1,
      "vm_name":"vmtenenatAPI2memmax",
      "vm_memory":"35840",
      "network_adapters":1, 
      "vlan":"dvs_DI9-1000_tenant",
      "number_of_sockets":1,
      "cores_per_socket":3
   },
   "requester":{  
"owner_first_name" : "John",
 "owner_last_name" : "Doe",
 "owner_email" : "[email protected]"
   },
   "tags":{  },
   "additional_values":{ },
   "ems_custom_attributes":{ },
   "miq_custom_attributes":{ }
}

viewing the request in the ui, when activating the hardware tab, shows the following error:
show_request_error

with the following error in production.log

[----] I, [2017-02-09T10:17:36.704140 #18253:1242268]  INFO -- : Started POST "/miq_request/prov_field_changed/?tab_id=hardware" for 127.0.0.1 at 2017-02-09 10:17:36 +0100
[----] I, [2017-02-09T10:17:36.749638 #18253:1242268]  INFO -- : Processing by MiqRequestController#prov_field_changed as JS
[----] I, [2017-02-09T10:17:36.749811 #18253:1242268]  INFO -- :   Parameters: {"tab_id"=>"hardware"}
[----] I, [2017-02-09T10:17:36.887893 #18253:1242268]  INFO -- :   Rendered miq_request/_prov_field.html.haml (0.1ms)
[----] I, [2017-02-09T10:17:36.888807 #18253:1242268]  INFO -- :   Rendered miq_request/_prov_field.html.haml (0.1ms)
[----] I, [2017-02-09T10:17:36.889768 #18253:1242268]  INFO -- :   Rendered miq_request/_prov_field.html.haml (0.1ms)
[----] I, [2017-02-09T10:17:36.894589 #18253:1242268]  INFO -- :   Rendered miq_request/_prov_field.html.haml (4.0ms)
[----] I, [2017-02-09T10:17:36.894755 #18253:1242268]  INFO -- :   Rendered miq_request/_prov_dialog_fieldset.html.haml (7.8ms)
[----] I, [2017-02-09T10:17:36.894908 #18253:1242268]  INFO -- :   Rendered shared/views/_prov_dialog.html.haml (8.8ms)
[----] F, [2017-02-09T10:17:36.895263 #18253:1242268] FATAL -- : Error caught: [ActionView::Template::Error] undefined method `last' for 3:Fixnum
/var/www/miq/vmdb/app/views/miq_request/_prov_field.html.haml:433:in `_app_views_miq_request__prov_field_html_haml__295995170752085862_129586680'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:158:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:166:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:348:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:156:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:343:in `render_partial'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:311:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/abstract_renderer.rb:42:in `block in instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `block in instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/abstract_renderer.rb:41:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:310:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/renderer.rb:47:in `render_partial'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/renderer.rb:21:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/helpers/rendering_helper.rb:32:in `render'
/var/www/miq/vmdb/app/views/miq_request/_prov_dialog_fieldset.html.haml:9:in `block in _app_views_miq_request__prov_dialog_fieldset_html_haml___923913509601057035_130123080'
/var/www/miq/vmdb/app/views/miq_request/_prov_dialog_fieldset.html.haml:6:in `each'
/var/www/miq/vmdb/app/views/miq_request/_prov_dialog_fieldset.html.haml:6:in `_app_views_miq_request__prov_dialog_fieldset_html_haml___923913509601057035_130123080'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:158:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:166:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:348:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:156:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:343:in `render_partial'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:311:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/abstract_renderer.rb:42:in `block in instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `block in instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/abstract_renderer.rb:41:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:310:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/renderer.rb:47:in `render_partial'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/renderer.rb:21:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/helpers/rendering_helper.rb:32:in `render'
/var/www/miq/vmdb/app/views/shared/views/_prov_dialog.html.haml:147:in `_app_views_shared_views__prov_dialog_html_haml__2565574381526500158_164029580'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:158:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:166:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:348:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/template.rb:156:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:343:in `render_partial'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:311:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/abstract_renderer.rb:42:in `block in instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `block in instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/abstract_renderer.rb:41:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/partial_renderer.rb:310:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/renderer.rb:47:in `render_partial'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/renderer/renderer.rb:21:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/helpers/rendering_helper.rb:32:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/action_view/helpers/jquery_helper.rb:566:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/action_view/helpers/jquery_helper.rb:579:in `with_formats'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/action_view/helpers/jquery_helper.rb:563:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/action_view/helpers/jquery_helper.rb:346:in `replace_html'
/var/www/miq/vmdb/app/controllers/miq_request_controller.rb:305:in `block in prov_load_tab'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/action_view/helpers/jquery_helper.rb:154:in `instance_exec'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/action_view/helpers/jquery_helper.rb:154:in `block in initialize'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/helpers/capture_helper.rb:203:in `with_output_buffer'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/action_view/helpers/jquery_helper.rb:153:in `initialize'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/jquery-rjs/renderers.rb:7:in `new'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/bundler/gems/jquery-rjs-ded3d28d0049/lib/jquery-rjs/renderers.rb:7:in `block in <module:Renderers>'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/renderers.rb:152:in `block in _render_to_body_with_renderer'
/opt/rubies/ruby-2.3.1/lib/ruby/2.3.0/set.rb:306:in `each_key'
/opt/rubies/ruby-2.3.1/lib/ruby/2.3.0/set.rb:306:in `each'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/renderers.rb:148:in `_render_to_body_with_renderer'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/renderers.rb:144:in `render_to_body'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/abstract_controller/rendering.rb:26:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/rendering.rb:36:in `render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/opt/rubies/ruby-2.3.1/lib/ruby/2.3.0/benchmark.rb:308:in `realtime'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/core_ext/benchmark.rb:12:in `ms'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/instrumentation.rb:44:in `block in render'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/instrumentation.rb:43:in `render'
/var/www/miq/vmdb/app/controllers/miq_request_controller.rb:303:in `prov_load_tab'
/var/www/miq/vmdb/app/controllers/application_controller/miq_request_methods.rb:19:in `prov_field_changed'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/abstract_controller/base.rb:188:in `process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:126:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:455:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:101:in `__run_callbacks__'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:90:in `run_callbacks'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/abstract_controller/callbacks.rb:19:in `process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/rescue.rb:20:in `process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `block in instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/notifications.rb:164:in `instrument'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/abstract_controller/base.rb:126:in `process'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionview-5.0.0.1/lib/action_view/rendering.rb:30:in `process'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal.rb:190:in `dispatch'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_controller/metal.rb:262:in `dispatch'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/routing/route_set.rb:32:in `serve'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/journey/router.rb:39:in `block in serve'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/journey/router.rb:26:in `each'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/journey/router.rb:26:in `serve'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/routing/route_set.rb:725:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/secure_headers-3.0.3/lib/secure_headers/middleware.rb:10:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/etag.rb:25:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/conditional_get.rb:38:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/head.rb:12:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/session/abstract/id.rb:222:in `context'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/session/abstract/id.rb:216:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/cookies.rb:613:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:97:in `__run_callbacks__'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/callbacks.rb:90:in `run_callbacks'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/callbacks.rb:36:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/executor.rb:12:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/rack/logger.rb:36:in `call_app'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/rack/logger.rb:26:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/request_store-1.3.1/lib/request_store/middleware.rb:9:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/request_id.rb:24:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/method_override.rb:22:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/runtime.rb:22:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/executor.rb:12:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/rack-2.0.1/lib/rack/sendfile.rb:111:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:522:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/configuration.rb:224:in `call'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/server.rb:561:in `handle_request'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/server.rb:406:in `process_client'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/server.rb:271:in `block in run'
/opt/rubies/ruby-2.3.1/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/thread_pool.rb:111:in `block in spawn_thread'
[----] I, [2017-02-09T10:17:36.896965 #18253:1242268]  INFO -- :   Rendered layouts/_exception_contents.html.haml (0.2ms)

in master and in euwe. I will submit a PR for this error. The fielddata is not in the expected format when submitted through the API. When the provisioning request is initiated through the UI, the error does not occur.

Spec for the Alert detail screen

Discovered as part of #347..

There are no specs for the Alert detail screen, nothing that tests that clicking on a detail returns a 200 instead of 500.

Go to Control > Explorer (/miq_policy/explorer)
Select the Alerts accordion
Click on an alert
(that screen) :)

@miq-bot assign PanSpagetka

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.