示例#1
0
        internal static void WriteValues(IValueWriter writer, IEnumerable <LdValue> values)
        {
            var arr = writer.Array();

            foreach (var v in values)
            {
                LdValueConverter.WriteJsonValue(v, arr);
            }
            arr.End();
        }
        public void WriteOutputEvent(object e)
        {
            _obj = _jsonWriter.Object();
            switch (e)
            {
            case EvaluationEvent ee:
                WriteEvaluationEvent(ee, false);
                break;

            case IdentifyEvent ie:
                WriteBase("identify", ie.Timestamp, ie.User?.Key);
                WriteUser(ie.User);
                break;

            case CustomEvent ce:
                WriteBase("custom", ce.Timestamp, ce.EventKey);
                WriteUserOrKey(ce.User, false, true);
                if (!ce.Data.IsNull)
                {
                    LdValueConverter.WriteJsonValue(ce.Data, _obj.Name("data"));
                }
                if (ce.MetricValue.HasValue)
                {
                    _obj.Name("metricValue").Double(ce.MetricValue.Value);
                }
                break;

            case AliasEvent ae:
                WriteBase("alias", ae.Timestamp, ae.Key);
                _obj.Name("contextKind").String(ae.ContextKind.ToIdentifier());
                _obj.Name("previousKey").String(ae.PreviousKey);
                _obj.Name("previousContextKind").String(ae.PreviousContextKind.ToIdentifier());
                break;

            case EventProcessorInternal.IndexEvent ie:
                WriteBase("index", ie.Timestamp, null);
                WriteUserOrKey(ie.User, true, false);
                break;

            case EventProcessorInternal.DebugEvent de:
                WriteEvaluationEvent(de.FromEvent, true);
                break;

            default:
                break;
            }
            _obj.End();
        }
示例#3
0
            public void WriteJson(object value, IValueWriter writer)
            {
                var user = (User)value;

                if (user is null)
                {
                    writer.Null();
                    return;
                }
                var obj = writer.Object();

                obj.Name("key").String(user.Key);
                obj.MaybeName("secondary", user.Secondary != null).String(user.Secondary);
                obj.MaybeName("ip", user.IPAddress != null).String(user.IPAddress);
                obj.MaybeName("country", user.Country != null).String(user.Country);
                obj.MaybeName("firstName", user.FirstName != null).String(user.FirstName);
                obj.MaybeName("lastName", user.LastName != null).String(user.LastName);
                obj.MaybeName("name", user.Name != null).String(user.Name);
                obj.MaybeName("avatar", user.Avatar != null).String(user.Avatar);
                obj.MaybeName("email", user.Email != null).String(user.Email);
                if (user.AnonymousOptional.HasValue)
                {
                    obj.Name("anonymous").Bool(user.Anonymous);
                }
                if (user.Custom.Count > 0)
                {
                    var customObj = obj.Name("custom").Object();
                    foreach (var kv in user.Custom)
                    {
                        LdValueConverter.WriteJsonValue(kv.Value, customObj.Name(kv.Key));
                    }
                    customObj.End();
                }
                if (user.PrivateAttributeNames.Count > 0)
                {
                    var attrsArr = obj.Name("privateAttributeNames").Array();
                    foreach (var n in user.PrivateAttributeNames)
                    {
                        attrsArr.String(n);
                    }
                    attrsArr.End();
                }
                obj.End();
            }
        private void WriteUser(User user)
        {
            if (user is null)
            {
                return;
            }
            var eu = EventUser.FromUser(user, _config);

            var userObj = _obj.Name("user").Object();

            userObj.Name("key").String(eu.Key);
            userObj.MaybeName("secondary", eu.Secondary != null).String(eu.Secondary);
            userObj.MaybeName("ip", eu.IPAddress != null).String(eu.IPAddress);
            userObj.MaybeName("country", eu.Country != null).String(eu.Country);
            userObj.MaybeName("firstName", eu.FirstName != null).String(eu.FirstName);
            userObj.MaybeName("lastName", eu.LastName != null).String(eu.LastName);
            userObj.MaybeName("name", eu.Name != null).String(eu.Name);
            userObj.MaybeName("avatar", eu.Avatar != null).String(eu.Avatar);
            userObj.MaybeName("email", eu.Email != null).String(eu.Email);
            if (eu.Anonymous.HasValue)
            {
                userObj.Name("anonymous").Bool(eu.Anonymous.Value);
            }
            if (eu.Custom != null && eu.Custom.Count > 0)
            {
                var customObj = userObj.Name("custom").Object();
                foreach (var kv in eu.Custom)
                {
                    LdValueConverter.WriteJsonValue(kv.Value, customObj.Name(kv.Key));
                }
                customObj.End();
            }
            if (eu.PrivateAttrs != null)
            {
                var arr = userObj.Name("privateAttrs").Array();
                foreach (var a in eu.PrivateAttrs)
                {
                    arr.String(a);
                }
                arr.End();
            }
            userObj.End();
        }
        private void WriteEvaluationEvent(EvaluationEvent ee, bool debug)
        {
            WriteBase(debug ? "debug" : "feature", ee.Timestamp, ee.FlagKey);

            WriteUserOrKey(ee.User, debug, true);
            if (ee.FlagVersion.HasValue)
            {
                _obj.Name("version").Int(ee.FlagVersion.Value);
            }
            if (ee.Variation.HasValue)
            {
                _obj.Name("variation").Int(ee.Variation.Value);
            }
            LdValueConverter.WriteJsonValue(ee.Value, _obj.Name("value"));
            if (!ee.Default.IsNull)
            {
                LdValueConverter.WriteJsonValue(ee.Default, _obj.Name("default"));
            }
            _obj.MaybeName("prereqOf", ee.PrereqOf != null).String(ee.PrereqOf);
            WriteReason(ee.Reason);
        }
        public void WriteJson(object value, IValueWriter writer)
        {
            var state = value as FeatureFlagsState;

            if (state is null)
            {
                writer.Null();
                return;
            }

            var obj = writer.Object();

            foreach (var entry in state._flags)
            {
                LdValueConverter.WriteJsonValue(entry.Value.Value, obj.Name(entry.Key));
            }

            obj.Name("$valid").Bool(state._valid);

            var allMetadataObj = obj.Name("$flagsState").Object();

            foreach (var entry in state._flags)
            {
                var flagMetadataObj = allMetadataObj.Name(entry.Key).Object();
                var meta            = entry.Value;
                flagMetadataObj.Name("variation").IntOrNull(meta.Variation);
                flagMetadataObj.Name("version").IntOrNull(meta.Version);
                flagMetadataObj.MaybeName("trackEvents", meta.TrackEvents).Bool(meta.TrackEvents);
                flagMetadataObj.MaybeName("debugEventsUntilDate", meta.DebugEventsUntilDate.HasValue)
                .Long(meta.DebugEventsUntilDate?.Value ?? 0);
                if (meta.Reason.HasValue)
                {
                    EvaluationReasonConverter.WriteJsonValue(meta.Reason.Value, flagMetadataObj.Name("reason"));
                }
                flagMetadataObj.End();
            }
            allMetadataObj.End();

            obj.End();
        }
        public void WriteSummaryEvent(EventSummary summary)
        {
            var obj = _jsonWriter.Object();

            obj.Name("kind").String("summary");
            obj.Name("startDate").Long(summary.StartDate.Value);
            obj.Name("endDate").Long(summary.EndDate.Value);

            var flagsObj = obj.Name("features").Object();

            var unprocessedCounters = summary.Counters.Select(kv => MutableKeyValuePair <EventsCounterKey, EventsCounterValue> .FromKeyValue(kv)).ToArray();

            for (var i = 0; i < unprocessedCounters.Length; i++)
            {
                var firstEntry = unprocessedCounters[i];
                if (firstEntry.Value is null)
                { // already processed
                    continue;
                }
                var flagKey     = firstEntry.Key.Key;
                var flagDefault = firstEntry.Value.Default;

                var flagObj = flagsObj.Name(flagKey).Object();
                LdValueConverter.WriteJsonValue(flagDefault, flagObj.Name("default"));
                var countersArr = flagObj.Name("counters").Array();

                for (var j = i; j < unprocessedCounters.Length; j++)
                {
                    var entry = unprocessedCounters[j];
                    var key   = entry.Key;
                    if (key.Key == flagKey && entry.Value != null)
                    {
                        var counter = entry.Value;
                        unprocessedCounters[j].Value = null; // mark as already processed

                        var counterObj = countersArr.Object();
                        if (key.Variation.HasValue)
                        {
                            counterObj.Name("variation").Int(key.Variation.Value);
                        }
                        LdValueConverter.WriteJsonValue(counter.FlagValue, counterObj.Name("value"));
                        if (key.Version.HasValue)
                        {
                            counterObj.Name("version").Int(key.Version.Value);
                        }
                        else
                        {
                            counterObj.Name("unknown").Bool(true);
                        }
                        counterObj.Name("count").Int(counter.Count);
                        counterObj.End();
                    }
                }

                countersArr.End();
                flagObj.End();
            }

            flagsObj.End();
            obj.End();
        }