Check_Users no output returned from plugin
Re: Check_Users no output returned from plugin
The nrpe.cfg file on your *Nagios Server* is not relevant here. What is relevant is the nrpe.cfg file on the *remote server* that you're trying to monitor. Plus, if you're monitoring a Windows host, you need to install NSClient++. Then, you can configure the NSClient++ agent to allow commands from your Nagios server, and you have to specify which commands. That's the "check_users" part that it's failing on.
Eric Loyd • http://everwatch.global • 844.240.EVER • @EricLoyd
I'm a Nagios Fanatic! • Join our public Nagios Discord Server!
Re: Check_Users no output returned from plugin
I have the NSclient installed on all my Windows Hosts
Here is the NSclient from the host in question I do not see any command references
Example please
Here is the NSclient from the host in question I do not see any command references
Code: Select all
# If you want to fill this file with all avalible options run the following command:
# nscp settings --generate --add-defaults --load-all
# If you want to activate a module and bring in all its options use:
# nscp settings --activate-module <MODULE NAME> --add-defaults
# For details run: nscp settings --help
; Undocumented section
[/modules]
; CheckDisk - CheckDisk can check various file and disk related things. The current version has commands to check Size of hard drives and directories.
CheckDisk = 1
; Event log Checker. - Check for errors and warnings in the event log. This is only supported through NRPE so if you plan to use only NSClient this wont help you at all.
CheckEventLog = 1
; Check External Scripts - A simple wrapper to run external scripts and batch files.
CheckExternalScripts = 1
; Helper function - Various helper function to extend other checks. This is also only supported through NRPE.
CheckHelpers = 1
; Check NSCP - Checkes the state of the agent
CheckNSCP = 1
; CheckSystem - Various system related checks, such as CPU load, process state, service state memory usage and PDH counters.
CheckSystem = 1
; CheckWMI - CheckWMI can check various file and disk related things. The current version has commands to check Size of hard drives and directories.
CheckWMI = 1
; NRPE server - A simple server that listens for incoming NRPE connection and handles them.
NRPEServer = enabled
; NSCAClient - Passive check support over NSCA.
NSCAClient = 1
; NSClient server - A simple server that listens for incoming NSClient (check_nt) connection and handles them. Although NRPE is the preferred method NSClient is fully supported and can be used for simplicity or for compatibility.
NSClientServer = 1
; Undocumented section
[/settings/default]
; ALLOWED CIPHERS - A better value is: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH
allowed ciphers = ADH
; ALLOWED HOSTS - A comaseparated list of allowed hosts. You can use netmasks (/ syntax) or * to create ranges.
allowed hosts = 10.2.8.79
; BIND TO ADDRESS - Allows you to bind server to a specific local address. This has to be a dotted ip address not a host name. Leaving this blank will bind to all available IP addresses.
bind to =
; CACHE ALLOWED HOSTS - If hostnames should be cached, improves speed and security somewhat but wont allow you to have dynamic IPs for your nagios server.
cache allowed hosts = true
; SSL CERTIFICATE -
certificate =
; PASSWORD - Password used to authenticate againast server
password = harley95
; TIMEOUT - Timeout when reading packets on incoming sockets. If the data has not arrived within this time we will bail out.
timeout = 30
; ENABLE SSL ENCRYPTION - This option controls if SSL should be enabled.
use ssl = true
; VERIFY MODE -
verify mode = none
; A list of aliases available. An alias is an internal command that has been "wrapped" (to add arguments). Be careful so you don't create loops (ie check_loop=check_a, check_a=check_loop)
[/settings/external scripts/alias]
; alias_cpu - Alias for alias_cpu. To configure this item add a section called: /settings/external scripts/alias/alias_cpu
alias_cpu = checkCPU warn=80 crit=90 time=5m time=1m time=30s
; alias_cpu_ex - Alias for alias_cpu_ex. To configure this item add a section called: /settings/external scripts/alias/alias_cpu_ex
alias_cpu_ex = checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s
; alias_disk - Alias for alias_disk. To configure this item add a section called: /settings/external scripts/alias/alias_disk
alias_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED
; alias_disk_loose - Alias for alias_disk_loose. To configure this item add a section called: /settings/external scripts/alias/alias_disk_loose
alias_disk_loose = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable
; alias_event_log - Alias for alias_event_log. To configure this item add a section called: /settings/external scripts/alias/alias_event_log
alias_event_log = CheckEventLog file=application file=system MaxWarn=1 MaxCrit=1 "filter=generated gt -2d AND severity NOT IN ('success', 'informational') AND source != 'SideBySide'" truncate=800 unique descriptions "syntax=%severity%: %source%: %message% (%count%)"
; alias_file_age - Alias for alias_file_age. To configure this item add a section called: /settings/external scripts/alias/alias_file_age
alias_file_age = checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%"
; alias_file_size - Alias for alias_file_size. To configure this item add a section called: /settings/external scripts/alias/alias_file_size
alias_file_size = CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10
; alias_mem - Alias for alias_mem. To configure this item add a section called: /settings/external scripts/alias/alias_mem
alias_mem = checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page
; alias_process - Alias for alias_process. To configure this item add a section called: /settings/external scripts/alias/alias_process
alias_process = checkProcState "$ARG1$=started"
; alias_process_count - Alias for alias_process_count. To configure this item add a section called: /settings/external scripts/alias/alias_process_count
alias_process_count = checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started"
; alias_process_hung - Alias for alias_process_hung. To configure this item add a section called: /settings/external scripts/alias/alias_process_hung
alias_process_hung = checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung"
; alias_process_stopped - Alias for alias_process_stopped. To configure this item add a section called: /settings/external scripts/alias/alias_process_stopped
alias_process_stopped = checkProcState "$ARG1$=stopped"
; alias_sched_all - Alias for alias_sched_all. To configure this item add a section called: /settings/external scripts/alias/alias_sched_all
alias_sched_all = CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0
; alias_sched_long - Alias for alias_sched_long. To configure this item add a section called: /settings/external scripts/alias/alias_sched_long
alias_sched_long = CheckTaskSched "filter=status = 'running' AND most_recent_run_time < -$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0
; alias_sched_task - Alias for alias_sched_task. To configure this item add a section called: /settings/external scripts/alias/alias_sched_task
alias_sched_task = CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0
; alias_service - Alias for alias_service. To configure this item add a section called: /settings/external scripts/alias/alias_service
alias_service = checkServiceState CheckAll
; alias_service_ex - Alias for alias_service_ex. To configure this item add a section called: /settings/external scripts/alias/alias_service_ex
alias_service_ex = checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc
; alias_up - Alias for alias_up. To configure this item add a section called: /settings/external scripts/alias/alias_up
alias_up = checkUpTime MinWarn=1d MinWarn=1h
; alias_updates - Alias for alias_updates. To configure this item add a section called: /settings/external scripts/alias/alias_updates
alias_updates = check_updates -warning 0 -critical 0
; alias_volumes - Alias for alias_volumes. To configure this item add a section called: /settings/external scripts/alias/alias_volumes
alias_volumes = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED
; alias_volumes_loose - Alias for alias_volumes_loose. To configure this item add a section called: /settings/external scripts/alias/alias_volumes_loose
alias_volumes_loose = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable
; default - Alias for default. To configure this item add a section called: /settings/external scripts/alias/default
default =
; Section for NRPE (NRPEServer.dll) (check_nrpe) protocol options.
[/settings/NRPE/server]
; COMMAND ARGUMENT PROCESSING - This option determines whether or not the we will allow clients to specify arguments to commands that are executed.
allow arguments = true
; COMMAND ALLOW NASTY META CHARS - This option determines whether or not the we will allow clients to specify nasty (as in |`&><'"\[]{}) characters in arguments.
allow nasty characters = true
; PORT NUMBER - Port to use for NRPE.
port = 5666
; Section for NSCA passive check module.
[/settings/NSCA/client]
; CHANNEL - The channel to listen to.
channel = NSCA
; HOSTNAME - The host name of this host if set to blank (default) the windows name of the computer will be used.
hostname = auto
; Target definition for: default
[/settings/NSCA/client/targets/default]
; TARGET ADDRESS - Target host address
address =
; ALLOWED CIPHERS - A better value is: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH
allowed ciphers = ADH
; SSL CERTIFICATE -
certificate =
; ENCRYPTION METHOD - Number corresponding to the various encryption algorithms (see the wiki). Has to be the same as the server or it wont work at all.
encryption = aes
; PASSWORD - The password to use. Again has to be the same as the server or it wont work at all.
password =
; TIMEOUT - Timeout when reading/writing packets to/from sockets.
timeout = 30
; ENABLE SSL ENCRYPTION - This option controls if SSL should be enabled.
use ssl = false
; VERIFY MODE -
verify mode = none
; Section for NSClient (NSClientServer.dll) (check_nt) protocol options.
[/settings/NSClient/server]
; PERFORMANCE DATA - Send performance data back to nagios (set this to 0 to remove all performance data).
performance data = true
; PORT NUMBER - Port to use for check_nt.
port = 12489
; Configure crash handling properties.
[/settings/crash]
; ARCHIVE CRASHREPORTS - Archive crash reports in the archive folder
archive = true
; folder - The archive folder for crash dunpes.
archive folder = ${shared-path}/crash-dumps
; RESTART - Submit crash reports to nsclient.org (or your configured submission server)
restart = true
; RESTART SERVICE NAME - The url to submit crash reports to
restart target = NSClientpp
; SUBMIT CRASHREPORTS - Submit crash reports to nsclient.org (or your configured submission server)
submit = false
; SUBMISSION URL - The url to submit crash reports to
submit url = http://crash.nsclient.org/submit
; Section for the EventLog Checker (CheckEventLog.dll).
[/settings/eventlog]
; BUFFER_SIZE - The size of the buffer to use when getting messages this affects the speed and maximum size of messages you can recieve.
buffer size = 131072
; DEBUG - Log more information when filtering (usefull to detect issues with filters) not usefull in production as it is a bit of a resource hog.
debug = false
; LOOKUP NAMES - Lookup the names of eventlog files
lookup names = true
; SYNTAX - Set this to use a specific syntax string for all commands (that don't specify one).
syntax =
; A set of options to configure the real time checks
[/settings/eventlog/real-time]
; DEBUG - Log missed records (usefull to detect issues with filters) not usefull in production as it is a bit of a resource hog.
debug = false
; REAL TIME CHECKING - Spawns a backgrounnd thread which detects issues and reports them back instantly.
enabled = false
; LOGS TO CHECK - Comma separated list of logs to check
log = application,system
; STARTUP AGE - The initial age to scan when starting NSClient++
startup age = 30m
; A set of filters to use in real-time mode
[/settings/eventlog/real-time/filters]
; Section for external scripts configuration options (CheckExternalScripts).
[/settings/external scripts]
; COMMAND ARGUMENT PROCESSING - This option determines whether or not the we will allow clients to specify arguments to commands that are executed.
allow arguments = false
; COMMAND ALLOW NASTY META CHARS - This option determines whether or not the we will allow clients to specify nasty (as in |`&><'"\[]{}) characters in arguments.
allow nasty characters = false
; SCRIPT DIRECTORY - Load all scripts in a directory and use them as commands. Probably dangerous but useful if you have loads of scripts :)
script path =
; COMMAND TIMEOUT - The maximum time in seconds that a command can execute. (if more then this execution will be aborted). NOTICE this only affects external commands not internal ones.
timeout = 60
; A list of scripts available to run from the CheckExternalScripts module. Syntax is: <command>=<script> <arguments>
[/settings/external scripts/scripts]
; A list of wrappped scripts (ie. using the template mechanism)
[/settings/external scripts/wrapped scripts]
; A list of templates for wrapped scripts
[/settings/external scripts/wrappings]
; BATCH FILE WRAPPING -
bat = scripts\\%SCRIPT% %ARGS%
; POWERSHELL WRAPPING -
ps1 = cmd /c echo scripts\\%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
; VISUAL BASIC WRAPPING -
vbs = cscript.exe //T:30 //NoLogo scripts\\lib\\wrapper.vbs %SCRIPT% %ARGS%
; Section for configuring the log handling.
[/settings/log]
; DATEMASK - The size of the buffer to use when getting messages this affects the speed and maximum size of messages you can recieve.
date format = %Y-%m-%d %H:%M:%S
; LOG LEVEL - Log level to use. Avalible levels are error,warning,info,debug,trace
level = info
; Configure log file properties.
[/settings/log/file]
; MAXIMUM FILE SIZE - When file size reaches this it will be truncated to 50% if set to 0 (default) truncation will be disabled
max size = 0
; Section for configuring the shared session.
[/settings/shared session]
; LOG LEVEL - Log level to use
enabled = false
; Section for system checks and system settings
[/settings/system/windows]
; DEFAULT LENGTH - Used to define the default intervall for range buffer checks (ie. CPU).
default buffer length = 1h
; Confiure which services has to be in which state
[/settings/system/windows/service mapping]
; A list of avalible remote target systems
[/settings/targets]
Example please
Re: Check_Users no output returned from plugin
Yes, you are correct. That is why it is failing. Please consult https://docs.nsclient.org/tutorial/nagios/nrpe.html for details on how to configure NSclient++ for NRPE. Your "check_users" command will likely need to change to something else, but everything you need is in the documentation.
Eric Loyd • http://everwatch.global • 844.240.EVER • @EricLoyd
I'm a Nagios Fanatic! • Join our public Nagios Discord Server!
Re: Check_Users no output returned from plugin
Ok
I added this to my nsclient.ini on the host in question
I then restarted the nscp service on the host
still getting this
Check All Users
Notifications for this service have been disabled
UNKNOWN 09-05-2016 11:41:02 2d 14h 32m 35s 3/3 No handler for command: check_users
I added this to my nsclient.ini on the host in question
Code: Select all
[/modules]
check_users = 1
; CheckDisk - CheckDisk can check various file and disk related things. The current version has commands to check Size of hard drives and directories.
CheckDisk = 1
still getting this
Check All Users
Notifications for this service have been disabled
UNKNOWN 09-05-2016 11:41:02 2d 14h 32m 35s 3/3 No handler for command: check_users
Re: Check_Users no output returned from plugin
The last article you posted almost helps but is missing a lot of info.
It shows this
./check_nrpe -H 10.0.0.1 -c foobar
UNKNOWN: No handler for that command
And don’t worry there is no foobar command but we will see how this looks in NSClient++
d NSClient++.cpp(1034) Injecting: foobar:
l NSClient++.cpp(1085) No handler for command: 'foobar'
l \NSCHelper.cpp(238) No handler for command 'foobar'.
We shall get back a bit to this later on when we have configure NSClient++ more so lets leave this for now.
Which is exactly ,my problem
But the article never goes over where to put foobar
The sentence in RED leads to no where.
Where do I put the foobar??? in my case check_users
It shows this
./check_nrpe -H 10.0.0.1 -c foobar
UNKNOWN: No handler for that command
And don’t worry there is no foobar command but we will see how this looks in NSClient++
d NSClient++.cpp(1034) Injecting: foobar:
l NSClient++.cpp(1085) No handler for command: 'foobar'
l \NSCHelper.cpp(238) No handler for command 'foobar'.
We shall get back a bit to this later on when we have configure NSClient++ more so lets leave this for now.
Which is exactly ,my problem
But the article never goes over where to put foobar
The sentence in RED leads to no where.
Where do I put the foobar??? in my case check_users
Re: Check_Users no output returned from plugin
Update
I found this
https://exchange.nagios.org/directory/P ... s)/details
It lead me to where to put the scripts in the nsclient.ini file
So I made the change below and I restarted nscp service on the host
Now I get this on Nagios
Check All Users
Notifications for this service have been disabled
UNKNOWN 09-05-2016 21:37:49 3d 0h 29m 25s 3/3 ExternalCommands: failed to create process (check_users %ARG1% %ARG2$): 2: The system cannot find the file specified.
Thoughts
I found this
https://exchange.nagios.org/directory/P ... s)/details
It lead me to where to put the scripts in the nsclient.ini file
So I made the change below and I restarted nscp service on the host
Code: Select all
; A list of scripts available to run from the CheckExternalScripts module. Syntax is: <command>=<script> <arguments>
[/settings/external scripts/scripts]
check_users = check_users %ARG1% %ARG2$
Check All Users
Notifications for this service have been disabled
UNKNOWN 09-05-2016 21:37:49 3d 0h 29m 25s 3/3 ExternalCommands: failed to create process (check_users %ARG1% %ARG2$): 2: The system cannot find the file specified.
Thoughts
Re: Check_Users no output returned from plugin
It's $ARG1$ not %
Eric Loyd • http://everwatch.global • 844.240.EVER • @EricLoyd
I'm a Nagios Fanatic! • Join our public Nagios Discord Server!
Re: Check_Users no output returned from plugin
Ooops
Made the change
now this
Check All Users
Notifications for this service have been disabled
UNKNOWN 09-05-2016 22:41:46 3d 1h 33m 49s 3/3 ExternalCommands: failed to create process (check_users $ARG1$ $ARG2$): 2: The system cannot find the file specified.
Made the change
now this
Check All Users
Notifications for this service have been disabled
UNKNOWN 09-05-2016 22:41:46 3d 1h 33m 49s 3/3 ExternalCommands: failed to create process (check_users $ARG1$ $ARG2$): 2: The system cannot find the file specified.
Re: Check_Users no output returned from plugin
Please post the service definition for us to review.
Former Nagios Employee
Re: Check_Users no output returned from plugin
Everyone
I switch to this one
My Host defined
My Commands.cfg
My service cfg
Got this all from this page
https://exchange.nagios.org/directory/P ... s)/details
On the Host
The nsclient.ini
; A list of scripts available to run from the CheckExternalScripts module. Syntax is: <command>=<script> <arguments>
[/settings/external scripts/scripts]
check_users = scripts\\perl\\check_users.exe $ARG1$ $ARG2$ "$ARG3$"
On the local drive c:\program files\nsclient++\scripts\perl I have tinyperl installed created check_users.exe via tinyperl -bin check_users.pl check_users.exe
restarted nscp on the Host
NOW I get this error on Nagios
Windows Users Notifications for this service have been disabled
CRITICAL 09-06-2016 21:15:42 0d 12h 59m 47s 3/3 (No output on stdout) stderr: execvp(/usr/local/nagios/libexec/check_nrpe, ...) failed. errno is 2: No such file or directory
So I ran this
root@tgcs017:/usr/local/nagios/etc/objects# find /usr/ -name "check_nrpe"
/usr/lib/nagios/plugins/check_nrpe
check_nrpe is not in /usr/local/nagios/libexec/check_nrpe
contents of
root@tgcs017:/usr/local/nagios/etc/objects# ls /usr/local/nagios/libexec
check_apt check_dig check_flexlm check_ifstatus check_mem.sh check_ntp check_ping check_smtp check_ups utils.pm
check_breeze check_disk check_ftp check_imap check_mrtg check_ntp_peer check_pop check_ssh check_uptime utils.sh
check_by_ssh check_disk_smb check_http check_ircd check_mrtgtraf check_ntp_time check_procs check_swap check_users
check_clamd check_dns check_icmp check_load check_nagios check_nwstat check_real check_tcp check_wave
check_cluster check_dummy check_ide_smart check_log check_nntp check_oracle check_rpc check_time negate
check_dhcp check_file_age check_ifoperstatus check_mailq check_nt check_overcr check_sensors check_udp urlize
Not sure why this plugin is looking in that folder
Any ideas.
If I copy check_nrpe then I would have two of them don't think that is good correct?
UPDATE UPDATE UPDATE......................
I copied check_nrpe to /usr/local/Nagios/libexec
Now it runs but I get this error
Critical: administrator login is not in allowed users list.
If you see my host def I do have allowedusers as administrator
I wonder if this need to be the domain name \ user home\administrator
Update
home\administrator did not work
I am now thinking that administrator is not being passed to the command
I ran this from the command prompt on the host
C:\Program Files\NSClient++\scripts\perl>check_users 2 3 administrator
OK: 1 user logged in
Active Sessions: administrator
It worked
Thoughts
I switch to this one
My Host defined
Code: Select all
define host{
use windows-server ; Inherit default values from a template
host_name TGCS025 ; The name we're giving to this host
alias Windows 2008 Exchange 2010 ; A longer name associated with the host
_ALLOWEDUSERS administrator
address 10.2.8.36 ; IP address of the host
}
My Commands.cfg
Code: Select all
define command{
command_name check_windows_users
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_users -a 2 3 "$_HOSTALLOWEDUSERS$"
}
My service cfg
Code: Select all
define service {
host_name TGCS025
service_description Windows Users
check_command check_windows_users
servicegroups AllServices
check_interval 1
use generic-service
}
Got this all from this page
https://exchange.nagios.org/directory/P ... s)/details
On the Host
The nsclient.ini
; A list of scripts available to run from the CheckExternalScripts module. Syntax is: <command>=<script> <arguments>
[/settings/external scripts/scripts]
check_users = scripts\\perl\\check_users.exe $ARG1$ $ARG2$ "$ARG3$"
On the local drive c:\program files\nsclient++\scripts\perl I have tinyperl installed created check_users.exe via tinyperl -bin check_users.pl check_users.exe
restarted nscp on the Host
NOW I get this error on Nagios
Windows Users Notifications for this service have been disabled
CRITICAL 09-06-2016 21:15:42 0d 12h 59m 47s 3/3 (No output on stdout) stderr: execvp(/usr/local/nagios/libexec/check_nrpe, ...) failed. errno is 2: No such file or directory
So I ran this
root@tgcs017:/usr/local/nagios/etc/objects# find /usr/ -name "check_nrpe"
/usr/lib/nagios/plugins/check_nrpe
check_nrpe is not in /usr/local/nagios/libexec/check_nrpe
contents of
root@tgcs017:/usr/local/nagios/etc/objects# ls /usr/local/nagios/libexec
check_apt check_dig check_flexlm check_ifstatus check_mem.sh check_ntp check_ping check_smtp check_ups utils.pm
check_breeze check_disk check_ftp check_imap check_mrtg check_ntp_peer check_pop check_ssh check_uptime utils.sh
check_by_ssh check_disk_smb check_http check_ircd check_mrtgtraf check_ntp_time check_procs check_swap check_users
check_clamd check_dns check_icmp check_load check_nagios check_nwstat check_real check_tcp check_wave
check_cluster check_dummy check_ide_smart check_log check_nntp check_oracle check_rpc check_time negate
check_dhcp check_file_age check_ifoperstatus check_mailq check_nt check_overcr check_sensors check_udp urlize
Not sure why this plugin is looking in that folder
Any ideas.
If I copy check_nrpe then I would have two of them don't think that is good correct?
UPDATE UPDATE UPDATE......................
I copied check_nrpe to /usr/local/Nagios/libexec
Now it runs but I get this error
Critical: administrator login is not in allowed users list.
If you see my host def I do have allowedusers as administrator
I wonder if this need to be the domain name \ user home\administrator
Update
home\administrator did not work
I am now thinking that administrator is not being passed to the command
I ran this from the command prompt on the host
C:\Program Files\NSClient++\scripts\perl>check_users 2 3 administrator
OK: 1 user logged in
Active Sessions: administrator
It worked
Thoughts