```ruby
module WatchmonkeyCli
  module Checkers
    class FtpAvailability < Checker
      self.checker_name = "ftp_availability"

      def enqueue host, opts = {}
        opts = { threshold: 1.months }.merge(opts)
        app.enqueue(self, host, opts)
      end

      def check! result, host, opts = {}
        Net::FTP.open(host) do |ftp|
          ftp.login(opts[:user], opts[:password])
        end
      rescue Net::FTPPermError
        result.error "Invalid credentials!"
      rescue SocketError => e
        result.error "#{e.class}: #{e.message}"
      end
    end
  end
end
```

Fix FTP availability not setting result type to error
user
```ruby
module WatchmonkeyCli
  module Checkers
    class FtpAvailability < Checker
      self.checker_name = "ftp_availability"

      def enqueue host, opts = {}
        opts = { threshold: 1.months }.merge(opts)
        app.enqueue(self, host, opts)
      end

      def check! result, host, opts = {}
        Net::FTP.open(host) do |ftp|
          ftp.login(opts[:user], opts[:password])
        end
      rescue Net::FTPPermError
        result.error! "Invalid credentials!"
      rescue SocketError => e
        result.error! "#{e.class}: #{e.message}"
      end
    end
  end
end
```
assistant