<!--
 ! 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.
 !-->
<events xmlns="events">
  <event>
    <type>node_join</type>
    <script>node_join/nc_join.sh</script>
    <description>Creates a NodeController process at a specified location.</description>
    <args>location_of_cc location(hostname/ip_address) node_controller_id</args>
    <daemon>true</daemon>
  </event>
  <event>
    <type>node_failure</type>
    <script>node_failure/nc_failure.sh</script>
    <description>Kills a NodeController process at a specified location.</description>
    <args>node_controller_id</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>cc_start</type>
    <script>cc_start/cc_start.sh</script>
    <description>Starts a  ClusterController process at a specified location.</description>
    <args></args>
    <daemon>true</daemon>
  </event>
  <event>
    <type>cc_failure</type>
    <script>cc_failure/cc_failure.sh</script>
    <description>Kills the Cluster Controller process running at a specified location.</description>
    <args></args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>node_restart</type>
    <script>node_restart/nc_restart.sh</script>
    <description>Shuts and restarts a NodeControllerProcess after a specified time interval, at a specified location</description>
    <args>address of cc, node controller id and sleep interval(seconds)</args>
    <daemon>true</daemon>
  </event>
  <event>
    <type>asterix_deploy</type>
    <script>asterix_deploy/asterix_deploy.sh</script>
    <description>Deploys Asterix application on a cluster running hyracks</description>
    <args>IP address of the node running the hyracks cluster controller</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>zookeeper_start</type>
    <script>zookeeper/start.sh</script>
    <description>Launches ZooKeeper server process</description>
    <args>IP address of the ZooKeeper server</args>
    <daemon>true</daemon>
  </event>
  <event>
    <type>zookeeper_stop</type>
    <script>zookeeper/stop.sh</script>
    <description>Terminates ZooKeeper server process</description>
    <args>IP address of the ZooKeeper server</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>file_transfer</type>
    <script>file/transfer.sh</script>
    <description>Copies a file on the local file system to a remote node</description>
    <args>local_source_path destination_node destination_path</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>directory_transfer</type>
    <script>file/dir_transfer.sh</script>
    <description>Copies a directory (and its contents) on the local file system to a remote node</description>
    <args>local_source_path destination_node destination_path</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>directory_copy</type>
    <script>file/dir_copy.sh</script>
    <description>Copies a directory (and its contents) from the remove file system to the local file system</description>
    <args>destination_node destination_path local_source_path</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>file_delete</type>
    <script>file/delete.sh</script>
    <description>Deletes a file on the local file system to a remote node</description>
    <args>destination_node destination_path</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>file_create</type>
    <script>file/create_file.sh</script>
    <description>Creates a file on the local file system to a remote node</description>
    <args>destination_node destination_path</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>backup</type>
    <script>backup/backup.sh</script>
    <description>Takes a backup of an Asterix instance</description>
    <args>Asterix_data_dir HDFSurl</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>restore</type>
    <script>restore/restore.sh</script>
    <description>Restores an Asterix instance from a back up</description>
    <args>Asterix_data_dir HDFSurl</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>hdfs_delete</type>
    <script>hdfs/delete.sh</script>
    <description>Deletes an HDFS path</description>
    <args>WorkingDir HadoopVersion HDFSUrl Path_to_Delete</args>
    <daemon>false</daemon>
  </event>
  <event>
    <type>node_info</type>
    <script>node_info/node_info.sh</script>
    <description>Retrieved environment information for a node</description>
    <daemon>false</daemon>
  </event>
</events>
