<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. Kerberos, LDAP, Custom. Binary/Htt
-->
<view>
  <name>Storm_Monitoring</name>
  <label>Storm Monitoring</label>
  <version>0.1.0</version>
  <build>${env.BUILD_NUMBER}</build>
  <description>Ambari view for Apache Storm</description>
  <parameter>
	<name>storm.host</name>
        <description>Enter the Storm UI Server hostname for accessing Storm. Host must be accessible from Ambari Server.</description>
        <label>Storm UI Server Hostname</label>
	<placeholder>storm-host.example.com</placeholder>
	<required>true</required>
  </parameter>
  <parameter>
	<name>storm.port</name>
        <description>Enter the Storm UI Server port for accessing Storm.</description>
        <label>Storm UI Server Port</label>
	<placeholder>8744</placeholder>
	<required>true</required>
  </parameter>
  <parameter>
	<name>storm.sslEnabled</name>
	<description>Enter true if SSL is enabled for Storm else false.</description>
	<label>SSL Enabled</label>
	<default-value>false</default-value>
	<required>true</required>
  </parameter>
</view>
