use of io.kubernetes.client.openapi.models.CoreV1EventBuilder in project java by kubernetes-client.
the class ObjectReferenceResolvingEventRecorder method generateEvent.
private void generateEvent(V1ObjectReference eventRef, Map<String, String> annotations, EventType t, String reason, String message) {
// defaulting event namespace for cluster-scoped resources..
String namespace = eventRef.getNamespace();
if (Strings.isNullOrEmpty(eventRef.getNamespace())) {
namespace = "default";
}
// build event
OffsetDateTime now = OffsetDateTime.now();
CoreV1Event event = new CoreV1EventBuilder().withMetadata(new V1ObjectMetaBuilder().withName(EventUtils.generateName(eventRef.getName(), now)).withNamespace(namespace).withAnnotations(annotations).build()).withInvolvedObject(eventRef).withType(t.toString()).withReason(reason).withMessage(message).withFirstTimestamp(now).withLastTimestamp(now).withSource(this.eventSource).withCount(1).build();
// fire event
try {
this.pendingEventQueue.offer(event, 100, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
// the queue is full, drop the event..
logger.warn("the event queue is full, dropping requesting event upon {}/{}", eventRef.getNamespace(), eventRef.getName());
}
}
use of io.kubernetes.client.openapi.models.CoreV1EventBuilder in project java by kubernetes-client.
the class EventCorrelatorTest method data.
// creates the test data
@Parameters
public static Collection<Object[]> data() {
V1ObjectReference podRef = new V1ObjectReferenceBuilder().withApiVersion("v1").withName("my-pod").withNamespace("default").build();
V1EventSource source = new V1EventSourceBuilder().withComponent("foo").withHost("bar").build();
CoreV1Event firstEvent = new CoreV1EventBuilder().withMetadata(new V1ObjectMetaBuilder().withName("").withNamespace("").build()).withSource(source).withInvolvedObject(podRef).withReason("first").withCount(1).withMessage("am a first").build();
CoreV1Event duplicatedEvent = new CoreV1EventBuilder().withMetadata(new V1ObjectMetaBuilder().withName("").withNamespace("").build()).withSource(source).withInvolvedObject(podRef).withReason("duplicated").withCount(1).withMessage("am a dup").build();
CoreV1Event similarEvent = new CoreV1EventBuilder().withMetadata(new V1ObjectMetaBuilder().withName("").withNamespace("").build()).withSource(source).withInvolvedObject(podRef).withReason("similar").withCount(1).withMessage("am a similar").build();
CoreV1Event aggregateEvent = new CoreV1EventBuilder().withMetadata(new V1ObjectMetaBuilder().withName("").withNamespace("").build()).withSource(source).withInvolvedObject(podRef).withReason("similar").withCount(1).withMessage(EventUtils.getAggregatedMessageByReason(similarEvent)).build();
Object[][] data = new Object[][] { { // create a single event should work
new CoreV1Event[] {}, deepCopy(firstEvent), deepCopy(firstEvent).count(1), false }, { // the same event should just count
new CoreV1Event[] { deepCopy(duplicatedEvent) }, deepCopy(duplicatedEvent), deepCopy(duplicatedEvent).count(2), false }, { // the same event should just count even if more than aggregate
deepCopyFor(duplicatedEvent, EventAggregator.DEFAULT_MAX_EVENT_LOCAL_KEYS), deepCopy(duplicatedEvent), deepCopy(duplicatedEvent).count(EventAggregator.DEFAULT_MAX_EVENT_LOCAL_KEYS + 1), false }, { // the same event is spam if too frequent
deepCopyFor(duplicatedEvent, EventSpamFilter.DEFAULT_TOKEN_BUCKET_CAPACITY + 1), deepCopy(duplicatedEvent), null, true }, { // similar events should be aggregated
deepCopyWithSimilarMessageFor(similarEvent, similarEvent.getMessage(), EventAggregator.DEFAULT_MAX_EVENT_LOCAL_KEYS - 1), deepCopy(similarEvent), deepCopy(aggregateEvent), false }, { // similar events many times should count the aggregate
deepCopyWithSimilarMessageFor(similarEvent, similarEvent.getMessage(), EventAggregator.DEFAULT_MAX_EVENT_LOCAL_KEYS), deepCopy(similarEvent), deepCopy(aggregateEvent).count(2), false } };
return Arrays.asList(data);
}
use of io.kubernetes.client.openapi.models.CoreV1EventBuilder in project java by kubernetes-client.
the class EventAggregatorTest method testSpammingEventsShouldBeAggregated.
@Test
public void testSpammingEventsShouldBeAggregated() {
String aggregatedMessage = "noxu";
EventAggregator aggregator = new EventAggregator(100, EventUtils::getAggregatedAndLocalKeyByReason, event -> aggregatedMessage);
for (int i = 0; i < aggregator.getMaxEvents() - 1; i++) {
String message = aggregator.aggregate(new CoreV1EventBuilder().withSource(new V1EventSource()).withInvolvedObject(new V1ObjectReference()).withMessage("foo: " + i).build()).getLeft().getMessage();
assertNotEquals(aggregatedMessage, message);
}
CoreV1Event aggregatedEvent = aggregator.aggregate(new CoreV1EventBuilder().withSource(new V1EventSource()).withInvolvedObject(new V1ObjectReference()).withMessage("not_noxu").build()).getLeft();
assertEquals(aggregatedMessage, aggregatedEvent.getMessage());
}
use of io.kubernetes.client.openapi.models.CoreV1EventBuilder in project java by kubernetes-client.
the class EventLoggerTest method testPatchComputing.
@Test
public void testPatchComputing() {
CoreV1Event event1 = new CoreV1EventBuilder().withSource(new V1EventSourceBuilder().build()).withMetadata(new V1ObjectMeta()).withInvolvedObject(new V1ObjectReferenceBuilder().build()).withCount(1).withMessage("foo1").build();
CoreV1Event event2 = new CoreV1EventBuilder().withSource(new V1EventSourceBuilder().build()).withMetadata(new V1ObjectMeta()).withInvolvedObject(new V1ObjectReferenceBuilder().build()).withCount(2).withMessage("foo2").build();
String aggregatedKey = EventUtils.getAggregatedAndLocalKeyByReason(event1).getRight();
EventLogger eventLogger = new EventLogger(100, EventUtils::getEventKey);
MutablePair<CoreV1Event, V1Patch> result1 = eventLogger.observe(event1, aggregatedKey);
assertEquals(event1, result1.getLeft());
assertNull(result1.getRight());
MutablePair<CoreV1Event, V1Patch> result2 = eventLogger.observe(event2, aggregatedKey);
assertEquals(event2, result2.getLeft());
assertNotNull(result2.getRight());
}
use of io.kubernetes.client.openapi.models.CoreV1EventBuilder in project java by kubernetes-client.
the class EventCorrelatorTest method validateEvent.
private void validateEvent(CoreV1Event expectedEvent, CoreV1Event actualEvent) {
CoreV1Event recvEvent = new CoreV1EventBuilder(actualEvent).build();
assertNotEquals(0, recvEvent.getFirstTimestamp().toInstant().toEpochMilli());
assertNotEquals(0, recvEvent.getLastTimestamp().toInstant().toEpochMilli());
if (actualEvent.getFirstTimestamp().equals(actualEvent.getLastTimestamp())) {
if (expectedEvent.getCount() > 1) {
fail("firstTimestamp and lastTimestamp must not be equal to indicate compression happen");
}
} else {
if (expectedEvent.getCount() == 1) {
fail("firstTimestamp and lastTimestamp must be equal to indicate there's only one event");
}
}
// clear the timestamps
recvEvent.setFirstTimestamp(expectedEvent.getFirstTimestamp());
recvEvent.setLastTimestamp(expectedEvent.getLastTimestamp());
if (!recvEvent.getMetadata().getName().startsWith(expectedEvent.getMetadata().getName())) {
fail("prefix doesnt match");
}
assertEquals(expectedEvent, recvEvent);
}
Aggregations