Search in sources :

Example 6 with AuditMessage

use of co.cask.cdap.proto.audit.AuditMessage in project cdap by caskdata.

the class DefaultAuditPublisher method publish.

@Override
public void publish(EntityId entityId, AuditType auditType, AuditPayload auditPayload) {
    String userId = Objects.firstNonNull(SecurityRequestContext.getUserId(), "");
    AuditMessage auditMessage = new AuditMessage(System.currentTimeMillis(), entityId, userId, auditType, auditPayload);
    LOG.trace("Publishing audit message {}", auditMessage);
    try {
        MessagingServices.publishWithRetry(messagingService, auditTopic, retryStrategy, GSON.toJson(auditMessage).getBytes(StandardCharsets.UTF_8));
    } catch (TopicNotFoundException e) {
        LOG.error("Missing topic for audit publish: {}", auditTopic);
    } catch (Exception e) {
        LOG.error("Got exception publishing audit message {}. Exception:", auditMessage, e);
    }
}
Also used : AuditMessage(co.cask.cdap.proto.audit.AuditMessage) TopicNotFoundException(co.cask.cdap.api.messaging.TopicNotFoundException) TopicNotFoundException(co.cask.cdap.api.messaging.TopicNotFoundException)

Example 7 with AuditMessage

use of co.cask.cdap.proto.audit.AuditMessage in project cdap by caskdata.

the class InMemoryAuditPublisher method publish.

@Override
public void publish(EntityId entityId, AuditType auditType, AuditPayload auditPayload) {
    AuditMessage auditMessage = new AuditMessage(0, entityId, "", auditType, auditPayload);
    messages.add(auditMessage);
}
Also used : AuditMessage(co.cask.cdap.proto.audit.AuditMessage)

Example 8 with AuditMessage

use of co.cask.cdap.proto.audit.AuditMessage in project cdap by caskdata.

the class MetadataStoreTest method testPublishing.

@Test
public void testPublishing() throws InterruptedException {
    generateMetadataUpdates();
    // Audit messages for metadata changes
    List<AuditMessage> actualAuditMessages = new ArrayList<>();
    for (AuditMessage auditMessage : auditPublisher.popMessages()) {
        // Ignore system audit messages
        if (auditMessage.getEntityId() instanceof NamespacedEntityId) {
            String systemNs = NamespaceId.SYSTEM.getNamespace();
            if (!((NamespacedEntityId) auditMessage.getEntityId()).getNamespace().equals(systemNs)) {
                actualAuditMessages.add(auditMessage);
            }
        }
    }
    Assert.assertEquals(expectedAuditMessages, actualAuditMessages);
}
Also used : AuditMessage(co.cask.cdap.proto.audit.AuditMessage) NamespacedEntityId(co.cask.cdap.proto.id.NamespacedEntityId) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 9 with AuditMessage

use of co.cask.cdap.proto.audit.AuditMessage in project cdap by caskdata.

the class AuditPublishTest method fetchAuditMessages.

private List<AuditMessage> fetchAuditMessages() throws TopicNotFoundException, IOException {
    List<AuditMessage> result = new ArrayList<>();
    try (CloseableIterator<RawMessage> iterator = messagingService.prepareFetch(auditTopic).fetch()) {
        while (iterator.hasNext()) {
            RawMessage message = iterator.next();
            result.add(GSON.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), AuditMessage.class));
        }
    }
    return result;
}
Also used : AuditMessage(co.cask.cdap.proto.audit.AuditMessage) ArrayList(java.util.ArrayList) RawMessage(co.cask.cdap.messaging.data.RawMessage)

Example 10 with AuditMessage

use of co.cask.cdap.proto.audit.AuditMessage in project cdap by caskdata.

the class AuditMessageTypeAdapter method deserialize.

@Override
public AuditMessage deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    JsonObject jsonObj = json.getAsJsonObject();
    long timeMillis = jsonObj.get("time").getAsLong();
    EntityId entityId = context.deserialize(jsonObj.getAsJsonObject("entityId"), EntityId.class);
    String user = jsonObj.get("user").getAsString();
    AuditType auditType = context.deserialize(jsonObj.getAsJsonPrimitive("type"), AuditType.class);
    AuditPayload payload;
    JsonObject jsonPayload = jsonObj.getAsJsonObject("payload");
    switch(auditType) {
        case METADATA_CHANGE:
            payload = context.deserialize(jsonPayload, MetadataPayload.class);
            break;
        case ACCESS:
            payload = context.deserialize(jsonPayload, AccessPayload.class);
            break;
        default:
            payload = AuditPayload.EMPTY_PAYLOAD;
    }
    return new AuditMessage(timeMillis, entityId, user, auditType, payload);
}
Also used : EntityId(co.cask.cdap.proto.id.EntityId) AccessPayload(co.cask.cdap.proto.audit.payload.access.AccessPayload) AuditMessage(co.cask.cdap.proto.audit.AuditMessage) AuditType(co.cask.cdap.proto.audit.AuditType) JsonObject(com.google.gson.JsonObject) AuditPayload(co.cask.cdap.proto.audit.AuditPayload) MetadataPayload(co.cask.cdap.proto.audit.payload.metadata.MetadataPayload)

Aggregations

AuditMessage (co.cask.cdap.proto.audit.AuditMessage)10 Test (org.junit.Test)5 ArrayList (java.util.ArrayList)4 AccessPayload (co.cask.cdap.proto.audit.payload.access.AccessPayload)3 NamespacedEntityId (co.cask.cdap.proto.id.NamespacedEntityId)3 ProgramId (co.cask.cdap.proto.id.ProgramId)3 AuditPayload (co.cask.cdap.proto.audit.AuditPayload)2 AuditType (co.cask.cdap.proto.audit.AuditType)2 MetadataPayload (co.cask.cdap.proto.audit.payload.metadata.MetadataPayload)2 EntityId (co.cask.cdap.proto.id.EntityId)2 ProgramRunId (co.cask.cdap.proto.id.ProgramRunId)2 WordCountApp (co.cask.cdap.WordCountApp)1 FormatSpecification (co.cask.cdap.api.data.format.FormatSpecification)1 Table (co.cask.cdap.api.dataset.table.Table)1 TopicNotFoundException (co.cask.cdap.api.messaging.TopicNotFoundException)1 InMemoryTableModule (co.cask.cdap.data2.dataset2.module.lib.inmemory.InMemoryTableModule)1 LineageWriterDatasetFramework (co.cask.cdap.data2.metadata.writer.LineageWriterDatasetFramework)1 NoOpLineageWriter (co.cask.cdap.data2.metadata.writer.NoOpLineageWriter)1 NoOpUsageRegistry (co.cask.cdap.data2.registry.NoOpUsageRegistry)1 RawMessage (co.cask.cdap.messaging.data.RawMessage)1