Аудит#

Java API, позволяющее фиксировать в системе аудита события, совершаемые в контексте плагина.

Варианты использования#

  • аудит событий, изменяющих состояние системы

Подключение#

  • подключите spring bean - @Autowired ru.sbt.swtr.track.core.audit.api.AuditService

  • фиксируйте события через java api - ru.sbt.swtr.track.core.audit.api.AuditService

Рекомендуемые события#

Рекомендуется фиксировать как успешные, так и не успешные попытки совершения события аудита:

  • создание объектов в БД

  • изменение объектов в БД

  • удаление объектов из БД

Пример#

  • REST API по загрузке данных

    public class ExampleRestApi implements CustomRestApi {
        private static final String PLUGIN_QUALIFIER = "example";
        @Autowired
        private AuditService auditService;
        @Autowired
        private SaveDirectoryValueDao saveDirectoryValueDao;
    
        @PutMapping(path = "/example/create/new/item", consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
        public ResponseEntity<String> job(@RequestBody AnyItem body) {
            try {
                saveDirectoryValueDao.save(body);
                auditService.audit(new AuditEvent() {
                    @Override
                    public String getTitle() {
                        return "my custom event";
                    }
    
                    @Override
                    public String getObject() {
                        return AnyItem.class;
                    }
    
                    @Override
                    public EventStatus getStatus() {
                        return EventStatus.SUCCESS;
                    }
    
                    @Override
                    public Object newValue() {
                        return body;
                    }
                });
            } catch (Exception ex) {
                auditService.audit(new AuditEvent() {
                    @Override
                    public String getTitle() {
                        return "my custom event";
                    }
    
                    @Override
                    public String getObject() {
                        return AnyItem.class;
                    }
    
                    @Override
                    public EventStatus getStatus() {
                        return EventStatus.FAIL;
                    }
    
                    @Override
                    public Collection<String> messages() {
                        return Set.of(ex.getMessage());
                    }
                });
                return ResponseEntity.ok("fail");
            }
            return ResponseEntity.ok("success");
        }
    }
    

Использование#

  • Инициируйте событие

    curl -X PUT --location "http://localhost:8080/swtr/extension/plugin/v2/rest/api//example/create/new/item" \ 
    -H "accept: application/json" \ 
    -H "Content-Type: application/json" \ 
    -d "{ \"name\": \"test\" }
    
  • Событие зафиксировано в LOG_AUDIT_FILE:audit.log

    {
      "eventdate": "2023-07-27T15:09:20.014+03:00",
      "@version": "1",
      "source_message": "my custom event::1 SUCCESS",
      "logger_name": "swtr-app-audit",
      "thread_name": "auto_Worker-14",
      "level": "INFO",
      "level_value": 20000,
      "user_ip":"127.0.0.1",
      "id":"a1fd18d4-057e-4ad0-97f3-ad9fafab9992",
      "event": "my custom event",
      "format_version": 1,
      "status": "SUCCESS",
      "object": "1",
      "object_type": "AnyItem",
      "internal_id": "3a78d572-5b89-4229-a59d-4f01ad737178",
      "username": "user",
      "userfio": "Иванов Иван Иванович",
      "oldvalue": null,
      "newvalue": "name: \"test\"",
      "messages": null,
      "tier": "LOCAL-EXAMPLE",
      "subsystem": "swtr-core",
      "host.ip": "127.0.0.1",
      "host.name": "localhost"
    }