// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.

package observer

import (
	log "github.com/sirupsen/logrus"

	"github.com/gitpod-io/gitpod/loadgen/pkg/loadgen"
)

// NewLogObserver produces a new observer that logs using logrus
func NewLogObserver(errorOnly bool) chan<- *loadgen.SessionEvent {
	res := make(chan *loadgen.SessionEvent, defaultCapacity)
	go func() {
		for evt := range res {
			if errorOnly && evt.Kind != loadgen.SessionError {
				continue
			}

			switch evt.Kind {
			case loadgen.SessionStart:
				log.Info("session started")
			case loadgen.SessionWorkspaceStart:
				log.WithField("instanceID", evt.WorkspaceStart.Spec.Id).Info("workspace started")
			case loadgen.SessionError:
				log.WithError(evt.Error).Error("error")
			case loadgen.SessionWorkspaceUpdate:
				up := evt.WorkspaceUpdate.Update
				log.WithField("instanceID", up.InstanceID).WithField("failed", up.Failed).WithField("phase", up.Phase).Info("workspace update")
			case loadgen.SessionDone:
				log.Info("session done")
			}
		}
	}()
	return res
}
