Skip to content

Commit

Permalink
apis: send UIResource instead of Resource (#4512)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicks committed May 6, 2021
1 parent a57ac81 commit 7f189df
Show file tree
Hide file tree
Showing 44 changed files with 931 additions and 877 deletions.
37 changes: 17 additions & 20 deletions internal/cloud/io_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,6 @@ func TestWriteSnapshotTo(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, `{
"view": {
"resources": [
{
"name": "(Tiltfile)",
"lastDeployTime": "0001-01-01T00:00:00Z",
"buildHistory": [
{
"startTime": "0001-01-01T00:00:00Z",
"finishTime": "0001-01-01T00:00:00Z"
}
],
"currentBuild": {
"startTime": "0001-01-01T00:00:00Z",
"finishTime": "0001-01-01T00:00:00Z"
},
"runtimeStatus": "not_applicable",
"updateStatus": "pending",
"isTiltfile": true
}
],
"runningTiltBuild": {
},
Expand All @@ -48,7 +29,23 @@ func TestWriteSnapshotTo(t *testing.T) {
"fromCheckpoint": -1,
"toCheckpoint": -1
},
"tiltStartTime": "0001-01-01T00:00:00Z"
"tiltStartTime": "0001-01-01T00:00:00Z",
"uiResources": [
{
"metadata": {
"name": "(Tiltfile)"
},
"status": {
"buildHistory": [
{
}
],
"runtimeStatus": "not_applicable",
"updateStatus": "pending"
}
}
]
}
}
`, buf.String())
Expand Down
134 changes: 54 additions & 80 deletions internal/hud/webview/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package webview
import (
"strings"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/tilt-dev/tilt/internal/cloud/cloudurl"
"github.com/tilt-dev/tilt/internal/store"
"github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1"
Expand All @@ -16,11 +18,8 @@ import (
func StateToProtoView(s store.EngineState, logCheckpoint logstore.Checkpoint) (*proto_webview.View, error) {
ret := &proto_webview.View{}

rpv, err := tiltfileResourceProtoView(s)
if err != nil {
return nil, err
}
ret.Resources = append(ret.Resources, rpv)
rpv := tiltfileResourceProtoView(s)
ret.UiResources = append(ret.UiResources, rpv)

for _, name := range s.ManifestDefinitionOrder {
mt, ok := s.ManifestTargets[name]
Expand All @@ -34,28 +33,13 @@ func StateToProtoView(s store.EngineState, logCheckpoint logstore.Checkpoint) (*
}

ms := mt.State
buildHistory := append([]model.BuildRecord{}, ms.BuildHistory...)

currentBuild := ms.CurrentBuild

endpoints := store.ManifestTargetEndpoints(mt)

podID := ms.MostRecentPod().Name

bh, err := ToProtoBuildRecords(buildHistory, s.LogStore)
if err != nil {
return nil, err
}
lastDeploy, err := timeToProto(ms.LastSuccessfulDeployTime)
if err != nil {
return nil, err
}
cb, err := ToProtoBuildRecord(currentBuild, s.LogStore)
if err != nil {
return nil, err
}
bh := ToBuildsTerminated(ms.BuildHistory, s.LogStore)
lastDeploy := metav1.NewMicroTime(ms.LastSuccessfulDeployTime)
cb := ToBuildRunning(ms.CurrentBuild)

specs, err := TargetSpecsToProto(mt.Manifest.TargetSpecs())
specs, err := ToAPITargetSpecs(mt.Manifest.TargetSpecs())
if err != nil {
return nil, err
}
Expand All @@ -65,31 +49,30 @@ func StateToProtoView(s store.EngineState, logCheckpoint logstore.Checkpoint) (*
// "most interesting" pod that's crash looping, or show logs from all pods
// at once).
hasPendingChanges, pendingBuildSince := ms.HasPendingChanges()
pbs, err := timeToProto(pendingBuildSince)
if err != nil {
return nil, err
}

r := &proto_webview.Resource{
Name: name.String(),
LastDeployTime: lastDeploy,
BuildHistory: bh,
PendingBuildSince: pbs,
CurrentBuild: cb,
EndpointLinks: ToProtoLinks(endpoints),
PodID: podID,
Specs: specs,
TriggerMode: int32(mt.Manifest.TriggerMode),
HasPendingChanges: hasPendingChanges,
Queued: s.ManifestInTriggerQueue(name),
r := &v1alpha1.UIResource{
ObjectMeta: metav1.ObjectMeta{
Name: name.String(),
},
Status: v1alpha1.UIResourceStatus{
LastDeployTime: lastDeploy,
BuildHistory: bh,
PendingBuildSince: metav1.NewMicroTime(pendingBuildSince),
CurrentBuild: cb,
EndpointLinks: ToAPILinks(endpoints),
Specs: specs,
TriggerMode: int32(mt.Manifest.TriggerMode),
HasPendingChanges: hasPendingChanges,
Queued: s.ManifestInTriggerQueue(name),
},
}

err = protoPopulateResourceInfoView(mt, r)
err = populateResourceInfoView(mt, r)
if err != nil {
return nil, err
}

ret.Resources = append(ret.Resources, r)
ret.UiResources = append(ret.UiResources, r)
}

logList, err := s.LogStore.ToLogList(logCheckpoint)
Expand Down Expand Up @@ -133,78 +116,69 @@ func StateToProtoView(s store.EngineState, logCheckpoint logstore.Checkpoint) (*
return ret, nil
}

func tiltfileResourceProtoView(s store.EngineState) (*proto_webview.Resource, error) {
func tiltfileResourceProtoView(s store.EngineState) *v1alpha1.UIResource {
ltfb := s.TiltfileState.LastBuild()
ctfb := s.TiltfileState.CurrentBuild

pctfb, err := ToProtoBuildRecord(ctfb, s.LogStore)
if err != nil {
return nil, err
}
pltfb, err := ToProtoBuildRecord(ltfb, s.LogStore)
if err != nil {
return nil, err
}
tr := &proto_webview.Resource{
Name: store.TiltfileManifestName.String(),
IsTiltfile: true,
CurrentBuild: pctfb,
BuildHistory: []*proto_webview.BuildRecord{
pltfb,
pctfb := ToBuildRunning(ctfb)
pltfb := ToBuildTerminated(ltfb, s.LogStore)
tr := &v1alpha1.UIResource{
ObjectMeta: metav1.ObjectMeta{
Name: store.TiltfileManifestName.String(),
},
Status: v1alpha1.UIResourceStatus{
CurrentBuild: pctfb,
BuildHistory: []v1alpha1.UIBuildTerminated{
pltfb,
},
RuntimeStatus: v1alpha1.RuntimeStatusNotApplicable,
UpdateStatus: s.TiltfileState.UpdateStatus(model.TriggerModeAuto),
},
RuntimeStatus: string(v1alpha1.RuntimeStatusNotApplicable),
UpdateStatus: string(s.TiltfileState.UpdateStatus(model.TriggerModeAuto)),
}
start, err := timeToProto(ctfb.StartTime)
if err != nil {
return nil, err
}
finish, err := timeToProto(ltfb.FinishTime)
if err != nil {
return nil, err
}
start := metav1.NewMicroTime(ctfb.StartTime)
finish := metav1.NewMicroTime(ltfb.FinishTime)
if !ctfb.Empty() {
tr.PendingBuildSince = start
tr.Status.PendingBuildSince = start
} else {
tr.LastDeployTime = finish
tr.Status.LastDeployTime = finish
}
return tr, nil
return tr
}

func protoPopulateResourceInfoView(mt *store.ManifestTarget, r *proto_webview.Resource) error {
r.UpdateStatus = string(mt.UpdateStatus())
r.RuntimeStatus = string(v1alpha1.RuntimeStatusNotApplicable)
func populateResourceInfoView(mt *store.ManifestTarget, r *v1alpha1.UIResource) error {
r.Status.UpdateStatus = mt.UpdateStatus()
r.Status.RuntimeStatus = v1alpha1.RuntimeStatusNotApplicable

if mt.Manifest.PodReadinessMode() == model.PodReadinessIgnore {
return nil
}

if mt.Manifest.IsDC() {
dcState := mt.State.DCRuntimeState()
r.RuntimeStatus = string(dcState.RuntimeStatus())
r.Status.RuntimeStatus = v1alpha1.RuntimeStatus(dcState.RuntimeStatus())
return nil
}
if mt.Manifest.IsLocal() {
lState := mt.State.LocalRuntimeState()
r.LocalResourceInfo = &proto_webview.LocalResourceInfo{Pid: int64(lState.PID), IsTest: mt.Manifest.LocalTarget().IsTest}
r.RuntimeStatus = string(lState.RuntimeStatus())
r.Status.LocalResourceInfo = &v1alpha1.UIResourceLocal{PID: int64(lState.PID), IsTest: mt.Manifest.LocalTarget().IsTest}
r.Status.RuntimeStatus = v1alpha1.RuntimeStatus(lState.RuntimeStatus())
return nil
}
if mt.Manifest.IsK8s() {
kState := mt.State.K8sRuntimeState()
pod := kState.MostRecentPod()
r.K8SResourceInfo = &proto_webview.K8SResourceInfo{
r.Status.K8sResourceInfo = &v1alpha1.UIResourceKubernetes{
PodName: pod.Name,
PodCreationTime: pod.CreatedAt.String(),
PodUpdateStartTime: pod.UpdateStartedAt.String(),
PodCreationTime: pod.CreatedAt,
PodUpdateStartTime: pod.UpdateStartedAt,
PodStatus: pod.Status,
PodStatusMessage: strings.Join(pod.Errors, "\n"),
AllContainersReady: store.AllPodContainersReady(pod),
PodRestarts: int32(store.VisiblePodContainerRestarts(pod)),
DisplayNames: mt.Manifest.K8sTarget().DisplayNames,
}

r.RuntimeStatus = string(kState.RuntimeStatus())
r.Status.RuntimeStatus = v1alpha1.RuntimeStatus(kState.RuntimeStatus())
return nil
}

Expand Down

0 comments on commit 7f189df

Please sign in to comment.