Full Mattermost server source with integrated Community Enterprise features. Includes vendor directory for offline/air-gapped builds. Structure: - enterprise-impl/: Enterprise feature implementations - enterprise-community/: Init files that register implementations - enterprise/: Bridge imports (community_imports.go) - vendor/: All dependencies for offline builds Build (online): go build ./cmd/mattermost Build (offline/air-gapped): go build -mod=vendor ./cmd/mattermost 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
package provisional
|
|
|
|
import (
|
|
"github.com/splitio/go-split-commons/v7/dtos"
|
|
"github.com/splitio/go-split-commons/v7/provisional/strategy"
|
|
)
|
|
|
|
// ImpressionManager interface
|
|
type ImpressionManager interface {
|
|
ProcessImpressions(impressions []dtos.Impression) ([]dtos.Impression, []dtos.Impression)
|
|
ProcessSingle(impression *dtos.Impression) bool
|
|
Process(impressions []dtos.Impression, listenerEnabled bool) ([]dtos.Impression, []dtos.Impression)
|
|
}
|
|
|
|
// ImpressionManagerImpl implements
|
|
type ImpressionManagerImpl struct {
|
|
processStrategy strategy.ProcessStrategyInterface
|
|
keyTracker strategy.ProcessStrategyInterface
|
|
}
|
|
|
|
// DEPRECATED
|
|
// NewImpressionManager creates new ImpManager
|
|
func NewImpressionManager(processStrategy strategy.ProcessStrategyInterface) ImpressionManager {
|
|
return &ImpressionManagerImpl{
|
|
processStrategy: processStrategy,
|
|
}
|
|
}
|
|
|
|
func NewImpressionManagerImp(none *strategy.NoneImpl, processStrategy strategy.ProcessStrategyInterface) ImpressionManager {
|
|
return &ImpressionManagerImpl{
|
|
processStrategy: processStrategy,
|
|
keyTracker: none,
|
|
}
|
|
}
|
|
|
|
// ProcessImpressions bulk processes
|
|
func (i *ImpressionManagerImpl) ProcessImpressions(impressions []dtos.Impression) ([]dtos.Impression, []dtos.Impression) {
|
|
return i.processStrategy.Apply(impressions)
|
|
}
|
|
|
|
// ProcessSingle accepts a pointer to an impression, updates it's PT accordingly,
|
|
// and returns whether it should be sent to the BE and to the lister
|
|
func (i *ImpressionManagerImpl) ProcessSingle(impression *dtos.Impression) bool {
|
|
return i.processStrategy.ApplySingle(impression)
|
|
}
|
|
|
|
func (i *ImpressionManagerImpl) Process(impressions []dtos.Impression, listenerEnabled bool) ([]dtos.Impression, []dtos.Impression) {
|
|
forLog := make([]dtos.Impression, 0, len(impressions))
|
|
forListener := make([]dtos.Impression, 0, len(impressions))
|
|
|
|
for index := range impressions {
|
|
if impressions[index].Disabled {
|
|
i.keyTracker.ApplySingle(&impressions[index])
|
|
} else if i.processStrategy.ApplySingle(&impressions[index]) {
|
|
forLog = append(forLog, impressions[index])
|
|
}
|
|
}
|
|
|
|
if listenerEnabled {
|
|
forListener = impressions
|
|
}
|
|
|
|
return forLog, forListener
|
|
}
|