Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added timestamps support for deployment logs #4481

Merged
merged 1 commit into from
Oct 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
* Fix #4396: Provide more error context when @Group/@Version annotations are missing
* Fix #4384: The Java generator now supports the generation of specific annotations (min, max, pattern, etc.), as defined by #4348
* Fix #3864: Change ManagedOpenShiftClient OSGi ConfigurationPolicy to REQUIRE
* Fix #4470: Added timestamps support for deployment logs and other resources.

#### Dependency Upgrade
* Fix #4243: Update Tekton pipeline model to v0.39.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@

public interface ScalableResource<T> extends Resource<T>,
Loggable,
Containerable<String, Loggable> {
Containerable<String, Loggable>,
TimestampBytesLimitTerminateTimeTailPrettyLoggable {

/**
* Scale the resource to given count
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,29 @@

import java.util.concurrent.TimeUnit;

public class RollingOperationContext extends PodControllerOperationContext {
public class RollingOperationContext {

private final PodOperationContext podOperationContext;
private boolean rolling;
private long rollingTimeout;
private TimeUnit rollingTimeUnit;

public RollingOperationContext() {
this.podOperationContext = new PodOperationContext();
}

public RollingOperationContext(String containerId, boolean rolling, long rollingTimeout, TimeUnit rollingTimeUnit, Integer logWaitTimeout) {
super(containerId, logWaitTimeout);
public RollingOperationContext(PodOperationContext podOperationContext, boolean rolling, long rollingTimeout,
TimeUnit rollingTimeUnit) {
this.podOperationContext = podOperationContext;
this.rolling = rolling;
this.rollingTimeout = rollingTimeout;
this.rollingTimeUnit = rollingTimeUnit != null ? rollingTimeUnit : TimeUnit.MILLISECONDS;
}

public PodOperationContext getPodOperationContext() {
return podOperationContext;
}

public Boolean getRolling() {
return rolling;
}
Expand All @@ -44,27 +51,62 @@ public long getRollingTimeout() {
public TimeUnit getRollingTimeUnit() {
return rollingTimeUnit;
}

public RollingOperationContext withRolling(boolean rolling) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext, rolling, rollingTimeout, rollingTimeUnit);
}

public RollingOperationContext withRollingTimeout(long rollingTimeout) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext, rolling, rollingTimeout, rollingTimeUnit);
}

public RollingOperationContext withRollingTimeUnit(TimeUnit rollingTimeUnit) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext, rolling, rollingTimeout, rollingTimeUnit);
}

@Override
public RollingOperationContext withContainerId(String containerId) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext.withContainerId(containerId), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withLogWaitTimeout(Integer logWaitTimeout) {
return new RollingOperationContext(podOperationContext.withLogWaitTimeout(logWaitTimeout), rolling, rollingTimeout,
rollingTimeUnit);
}

@Override
public RollingOperationContext withLogWaitTimout(Integer logWaitTimeout) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);

public RollingOperationContext withLimitBytes(Integer limitBytes) {
return new RollingOperationContext(podOperationContext.withLimitBytes(limitBytes), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withTerminatedStatus(boolean terminatedStatus) {
return new RollingOperationContext(podOperationContext.withTerminatedStatus(terminatedStatus), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withPrettyOutput(boolean prettyOutput) {
return new RollingOperationContext(podOperationContext.withPrettyOutput(prettyOutput), rolling, rollingTimeout,
rollingTimeUnit);
}


public RollingOperationContext withTailingLines(Integer tailingLines) {
return new RollingOperationContext(podOperationContext.withTailingLines(tailingLines), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withSinceTimestamp(String sinceTimestamp) {
return new RollingOperationContext(podOperationContext.withSinceTimestamp(sinceTimestamp), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withSinceSeconds(Integer sinceSeconds) {
return new RollingOperationContext(podOperationContext.withSinceSeconds(sinceSeconds), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withTimestamps(boolean timestamps) {
return new RollingOperationContext(podOperationContext.withTimestamps(timestamps), rolling, rollingTimeout,
rollingTimeUnit);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@
import io.fabric8.kubernetes.api.model.extensions.DeploymentRollback;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.KubernetesClientTimeoutException;
import io.fabric8.kubernetes.client.dsl.BytesLimitTerminateTimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.LogWatch;
import io.fabric8.kubernetes.client.dsl.Loggable;
import io.fabric8.kubernetes.client.dsl.PrettyLoggable;
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
import io.fabric8.kubernetes.client.dsl.TailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeoutImageEditReplacePatchable;
import io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.OperationContext;
Expand Down Expand Up @@ -214,8 +218,7 @@ private List<RollableScalableResource<ReplicaSet>> doGetLog() {
String rcUid = deployment.getMetadata().getUid();

ReplicaSetOperationsImpl rsOperations = new ReplicaSetOperationsImpl(
new RollingOperationContext(rollingOperationContext.getContainerId(), false, 0, null,
rollingOperationContext.getLogWaitTimeout()),
new RollingOperationContext(rollingOperationContext.getPodOperationContext(), false, 0, null),
context.withName(null));
ReplicaSetList rcList = rsOperations.withLabels(getDeploymentSelectorLabels(deployment)).list();

Expand Down Expand Up @@ -284,4 +287,38 @@ protected List<Container> getContainers(Deployment value) {
return value.getSpec().getTemplate().getSpec().getContainers();
}

@Override
public TimeTailPrettyLoggable limitBytes(int limitBytes) {
return new DeploymentOperationsImpl(rollingOperationContext.withLimitBytes(limitBytes), context);
}

@Override
public TimeTailPrettyLoggable terminated() {
return new DeploymentOperationsImpl(rollingOperationContext.withTerminatedStatus(true), context);
}

@Override
public Loggable withPrettyOutput() {
return new DeploymentOperationsImpl(rollingOperationContext.withPrettyOutput(true), context);
}

@Override
public PrettyLoggable tailingLines(int lines) {
return new DeploymentOperationsImpl(rollingOperationContext.withTailingLines(lines), context);
}

@Override
public TailPrettyLoggable sinceTime(String timestamp) {
return new DeploymentOperationsImpl(rollingOperationContext.withSinceTimestamp(timestamp), context);
}

@Override
public TailPrettyLoggable sinceSeconds(int seconds) {
return new DeploymentOperationsImpl(rollingOperationContext.withSinceSeconds(seconds), context);
}

@Override
public BytesLimitTerminateTimeTailPrettyLoggable usingTimestamps() {
return new DeploymentOperationsImpl(rollingOperationContext.withTimestamps(true), context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,14 @@
import io.fabric8.kubernetes.api.model.extensions.DeploymentRollback;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.dsl.BytesLimitTerminateTimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.LogWatch;
import io.fabric8.kubernetes.client.dsl.Loggable;
import io.fabric8.kubernetes.client.dsl.PodResource;
import io.fabric8.kubernetes.client.dsl.PrettyLoggable;
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
import io.fabric8.kubernetes.client.dsl.TailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeoutImageEditReplacePatchable;
import io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.OperationContext;
Expand Down Expand Up @@ -117,14 +122,15 @@ public Status rollback(DeploymentRollback deploymentRollback) {

@Override
public String getLog(boolean isPretty) {
return PodOperationUtil.getLog(doGetLog(isPretty), isPretty);
return PodOperationUtil
.getLog(new ReplicaSetOperationsImpl(rollingOperationContext.withPrettyOutput(isPretty), context).doGetLog(), isPretty);
}

private List<PodResource> doGetLog(boolean isPretty) {
private List<PodResource> doGetLog() {
ReplicaSet replicaSet = requireFromServer();
return PodOperationUtil.getPodOperationsForController(context, replicaSet.getMetadata().getUid(),
getReplicaSetSelectorLabels(replicaSet), isPretty, rollingOperationContext.getLogWaitTimeout(),
rollingOperationContext.getContainerId());
return PodOperationUtil.getPodOperationsForController(context,
rollingOperationContext.getPodOperationContext(), replicaSet.getMetadata().getUid(),
getReplicaSetSelectorLabels(replicaSet));
}

/**
Expand All @@ -134,7 +140,7 @@ private List<PodResource> doGetLog(boolean isPretty) {
*/
@Override
public Reader getLogReader() {
return PodOperationUtil.getLogReader(doGetLog(false));
return PodOperationUtil.getLogReader(doGetLog());
}

/**
Expand All @@ -144,12 +150,12 @@ public Reader getLogReader() {
*/
@Override
public InputStream getLogInputStream() {
return PodOperationUtil.getLogInputStream(doGetLog(false));
return PodOperationUtil.getLogInputStream(doGetLog());
}

@Override
public LogWatch watchLog(OutputStream out) {
return PodOperationUtil.watchLog(doGetLog(false), out);
return PodOperationUtil.watchLog(doGetLog(), out);
}

static Map<String, String> getReplicaSetSelectorLabels(ReplicaSet replicaSet) {
Expand All @@ -165,4 +171,39 @@ static Map<String, String> getReplicaSetSelectorLabels(ReplicaSet replicaSet) {
protected List<Container> getContainers(ReplicaSet value) {
return value.getSpec().getTemplate().getSpec().getContainers();
}

@Override
public TimeTailPrettyLoggable limitBytes(int limitBytes) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withLimitBytes(limitBytes), context);
}

@Override
public TimeTailPrettyLoggable terminated() {
return new ReplicaSetOperationsImpl(rollingOperationContext.withTerminatedStatus(true), context);
}

@Override
public Loggable withPrettyOutput() {
return new ReplicaSetOperationsImpl(rollingOperationContext.withPrettyOutput(true), context);
}

@Override
public PrettyLoggable tailingLines(int lines) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withTailingLines(lines), context);
}

@Override
public TailPrettyLoggable sinceTime(String timestamp) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withSinceTimestamp(timestamp), context);
}

@Override
public TailPrettyLoggable sinceSeconds(int seconds) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withSinceSeconds(seconds), context);
}

@Override
public BytesLimitTerminateTimeTailPrettyLoggable usingTimestamps() {
return new ReplicaSetOperationsImpl(rollingOperationContext.withTimestamps(true), context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ public T patch(PatchContext patchContext, T item) {

@Override
public Loggable withLogWaitTimeout(Integer logWaitTimeout) {
return newInstance(rollingOperationContext.withLogWaitTimout(logWaitTimeout));
return newInstance(rollingOperationContext.withLogWaitTimeout(logWaitTimeout));
}

@Override
Expand All @@ -200,7 +200,7 @@ public ImageEditReplacePatchable<T> withTimeout(long timeout, TimeUnit unit) {

@Override
public String getLog() {
return getLog(false);
return getLog(rollingOperationContext.getPodOperationContext().isPrettyOutput());
}

@Override
Expand Down