# filters sshguard messages
{
  resource."graylog_pipeline_rule" = {

    routeToSshGuardMessage = {

      description = "route sshguard messages to sshguard stream (TF)";
      source = ''
        rule "route sshguard message"
        when
          to_string($message.facility) == "sshguard"
        then
          route_to_stream(id:"''${ graylog_stream.sshguard.id }", remove_from_default: true);
        end
      '';
    };

    extractAttack ={
      description = "extract sshguard attack information (TF)";
      source = ''
        rule "extract sshguard attack"
        when
          starts_with(to_string($message.message), "Attack from")
        then
          set_fields(grok(pattern:"Attack from \"%{IPV4:source_ip}\"", value: to_string($message.message), only_named_captures: true));
          set_field("is_thread", true);
          route_to_stream(id:"''${ graylog_stream.thread.id }");
        end
      '';
    };

  };

  graylog.all_messages.rules = ["route sshguard message"];

  graylog.stream.sshguard = {
    index_set_id = "\${data.graylog_index_set.default.id}";
    pipelines = [ "\${graylog_pipeline.processSshGuardMessage.id}" ];
  };

  graylog.pipeline.processSshGuardMessage = {
    source = ''
      stage 0 match all
        rule "extract sshguard attack";
    '';
    description = "process messages of the sshguard stream(TF)";
  };


}