pentaho/pentaho-kettle · error · KettleException

JobSendNagiosPassiveCheck.Error.TargetServerMissing

Error message

JobSendNagiosPassiveCheck.Error.TargetServerMissing

What it means

This KettleException is thrown in execute() when the Nagios target server name (after environment substitution) is empty. The job entry cannot send a passive check without knowing which Nagios server to send it to. The message text comes from the localized message key JobSendNagiosPassiveCheck.Error.TargetServerMissing.

Solutions

  1. Set the server name field in the job entry dialog to the Nagios server host
  2. If it uses a variable, define that variable in kettle.properties, the job's 'Set Variables', or pass it as a named parameter at runtime
  3. Add a preceding 'Check if file/connection' style validation or abort path that verifies the variable is set before this entry runs

Example fix

// before (kettle.properties missing the value)
# NAGIOS_HOST not set -> ${NAGIOS_HOST} resolves to empty
// after
NAGIOS_HOST=nagios.example.com
Defensive patterns

Strategy: validation

Validate before calling

// before executing the job
String host = job.getVariable("NAGIOS_HOST");
if (host == null || host.trim().isEmpty()) {
  throw new IllegalStateException("NAGIOS_HOST must be set before running the Nagios passive check job");
}

Type guard

boolean isNonEmpty(String s) { return s != null && !s.trim().isEmpty(); }

Try / catch

try {
  result = jobEntry.execute(result, nr);
} catch (KettleException e) {
  if (e.getMessage().contains("TargetServerMissing")) {
    logError("Configure the Nagios server name or define its variable");
  }
}

Prevention

When it happens

Trigger: Executing the SendNagiosPassiveCheck job entry when the 'Server name' field is blank, or it contains only a variable/parameter that resolves to empty (e.g. ${NAGIOS_HOST} unset at runtime).

Common situations: Job copied from another environment where the environment variable defining the host no longer exists; parameter not passed on the command line or by the scheduler; field simply left blank in the dialog.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/f7591bd6ae4bf8d8. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/sendnagiospassivecheck/JobEntrySendNagiosPassiveCheck.java:465

    Result result = previousResult;
    result.setNrErrors( 1 );
    result.setResult( false );

    // Target
    String realServername = environmentSubstitute( serverName );
    String realPassword = Utils.resolvePassword( variables, password );
    int realPort = Const.toInt( environmentSubstitute( port ), DEFAULT_PORT );
    int realResponseTimeOut = Const.toInt( environmentSubstitute( responseTimeOut ), DEFAULT_RESPONSE_TIME_OUT );
    int realConnectionTimeOut =
      Const.toInt( environmentSubstitute( connectionTimeOut ), DEFAULT_CONNECTION_TIME_OUT );

    // Sender
    String realSenderServerName = environmentSubstitute( senderServerName );
    String realSenderServiceName = environmentSubstitute( senderServiceName );

    try {
      if ( Utils.isEmpty( realServername ) ) {
        throw new KettleException( BaseMessages.getString(
          PKG, "JobSendNagiosPassiveCheck.Error.TargetServerMissing" ) );
      }

      String realMessageString = environmentSubstitute( message );

      if ( Utils.isEmpty( realMessageString ) ) {
        throw new KettleException( BaseMessages.getString( PKG, "JobSendNagiosPassiveCheck.Error.MessageMissing" ) );
      }

      Level level = Level.UNKNOWN;
      switch ( getLevel() ) {
        case LEVEL_TYPE_OK:
          level = Level.OK;
          break;
        case LEVEL_TYPE_CRITICAL:
          level = Level.CRITICAL;
          break;
        case LEVEL_TYPE_WARNING:

View on GitHub (pinned to f3058517a1)