#
# 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.
#

# HDFS properties
hdfs.upload.dir = /failmon
hadoop.conf.path = ../../../conf

# Hadoop Log file properties
log.hadoop.enabled = true
log.hadoop.filenames = /home/hadoop/hadoop-0.17.0/logs/
# set to non-zero only for continous mode:
log.hadoop.interval = 0
log.hadoop.dateformat = \\d{4}-\\d{2}-\\d{2}
log.hadoop.timeformat = \\d{2}:\\d{2}:\\d{2}

# System Log file properties
log.system.enabled = true
log.system.filenames = /var/log/messages
# set to non-zero only for continous mode:
log.system.interval = 0
log.system.dateformat = (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s+(\\d+)
log.system.timeformat = \\d{2}:\\d{2}:\\d{2}

# Network Interfaces
nic.enabled = true
nic.list = eth0, eth1
# set to non-zero only for continous mode:
nic.interval = 0

# CPUs & Motherboard
cpu.enabled = true
# set to non-zero only for continous mode:
cpu.interval = 0

# Disk devices. For all devices listed under disks.list, the corresponding
# property disk./dev/xxx.source specifies where the output of 
# "sudo smartctl --all /dev/xxx" can be read by a user. If this property is
# missing, super-user privileges are assumed and the smartctl command will be 
# invoked itself.

disks.enabled = true
disks.list = /dev/sda, /dev/sdb, /dev/sdc, /dev/sdd, /dev/hda, /dev/hdb, /dev/hdc, /dev/hdd
#disks./dev/sda.source = hda.smart
# set to non-zero only for continous mode:
disks.interval = 0

# lm-sensors polling
sensors.enabled = true
# set to non-zero only for continous mode:
sensors.interval = 0

# Executor thread properties	
executor.interval.min = 1	

# Anonymization properties
anonymizer.hash.hostnames = false
anonymizer.hash.ips = false
anonymizer.hash.filenames = false
anonymizer.hostname.suffix = apache.org

# Local files options
local.tmp.filename = failmon.dat
local.tmp.compression = false
# set to non-zero only for continous mode:
local.upload.interval = 0
