internal TraceLoggingTypeInfo( Type dataType, string name, EventLevel level, EventOpcode opcode, EventKeywords keywords, EventTags tags) { if (dataType == null) { throw new ArgumentNullException("dataType"); } if (name == null) { throw new ArgumentNullException("eventName"); } Contract.EndContractBlock(); Statics.CheckName(name); this.name = name; this.keywords = keywords; this.level = level; this.opcode = opcode; this.tags = tags; this.dataType = dataType; }
/// <summary> /// Returns a new instance of TraceLoggingEventInfo corresponding to the name, /// flags, and typeInfos provided. /// </summary> /// <param name="name"> /// The name to use when the name parameter passed to /// EventSource.Write is null. This value must not be null. /// </param> /// <param name="tags"> /// Tags to add to the event if the tags are not set via options. /// </param> /// <param name="typeInfos"> /// The types of the fields in the event. This value must not be null. /// </param> /// <returns> /// An instance of TraceLoggingEventInfo with DefaultName set to the specified name /// and with the specified typeInfos. /// </returns> internal TraceLoggingEventTypes( string name, EventTags tags, params TraceLoggingTypeInfo[] typeInfos) : this(tags, name, MakeArray(typeInfos)) { return; }
/// <summary> /// Track an event. /// </summary> /// <param name="eventName">The event name.</param> /// <param name="eventTags">A map of event tag names to event tag values.</param> public virtual void TrackEvent(string eventName, EventTags eventTags) { Optimizely.Track(eventName, UserId, Attributes, eventTags); }
private static void SendEvent(bool writeToConsole = true) { var ev = new Event(); if (_dateSpans[_dateSpanIndex] != TimeSpan.Zero) { ev.Date = RandomHelper.GetDateTime(DateTime.Now.Subtract(_dateSpans[_dateSpanIndex]), DateTime.Now); } ev.Type = EventTypes.Random(); if (ev.Type == Event.KnownTypes.FeatureUsage) { ev.Source = FeatureNames.Random(); } else if (ev.Type == Event.KnownTypes.NotFound) { ev.Source = PageNames.Random(); } else if (ev.Type == Event.KnownTypes.Log) { ev.Source = LogSources.Random(); ev.Message = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 15)); } ev.SetUserIdentity(Identities.Random()); for (int i = 0; i < RandomHelper.GetRange(1, 5); i++) { string key = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 10)); while (ev.Data.ContainsKey(key) || key == Event.KnownDataKeys.Error) { key = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 15)); } ev.Data.Add(key, RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 25))); } int tagCount = RandomHelper.GetRange(1, 3); for (int i = 0; i < tagCount; i++) { string tag = EventTags.Random(); if (!ev.Tags.Contains(tag)) { ev.Tags.Add(tag); } } if (ev.Type == Event.KnownTypes.Error) { // limit error variation so that stacking will occur if (_randomErrors == null) { _randomErrors = new List <Error>(Enumerable.Range(1, 25).Select(i => GenerateError())); } ev.Data[Event.KnownDataKeys.Error] = _randomErrors.Random(); } // use server settings to see if we should include this data if (ExceptionlessClient.Default.Configuration.Settings.GetBoolean("IncludeConditionalData", true)) { ev.AddObject(new { Total = 32.34, ItemCount = 2, Email = "*****@*****.**" }, "Conditional Data"); } //ev.AddRecentTraceLogEntries(); ExceptionlessClient.Default.SubmitEvent(ev); if (writeToConsole) { Console.SetCursorPosition(0, OPTIONS_MENU_LINE_COUNT + 2); Console.WriteLine("Sent 1 event."); Trace.WriteLine("Sent 1 event."); ClearNonOptionsLines(); } }
private TraceLoggingEventTypes( EventTags tags, string defaultName, TraceLoggingTypeInfo[] typeInfos) { if (defaultName == null) { throw new ArgumentNullException("defaultName"); } Contract.EndContractBlock(); this.typeInfos = typeInfos; this.name = defaultName; this.tags = tags; this.level = Statics.DefaultLevel; var collector = new TraceLoggingMetadataCollector(); foreach (var typeInfo in typeInfos) { this.level = Statics.Combine((int)typeInfo.Level, this.level); this.opcode = Statics.Combine((int)typeInfo.Opcode, this.opcode); this.keywords |= typeInfo.Keywords; typeInfo.WriteMetadata(collector, null, EventFieldFormat.Default); } this.typeMetadata = collector.GetMetadata(); this.scratchSize = collector.ScratchSize; this.dataCount = collector.DataCount; this.pinCount = collector.PinCount; }
private unsafe void WriteMultiMergeInner( string eventName, ref EventSourceOptions options, TraceLoggingEventTypes eventTypes, Guid *activityID, Guid *childActivityID, params object[] values) { #if FEATURE_MANAGED_ETW int identity = 0; byte level = (options.valuesSet & EventSourceOptions.levelSet) != 0 ? options.level : eventTypes.level; byte opcode = (options.valuesSet & EventSourceOptions.opcodeSet) != 0 ? options.opcode : eventTypes.opcode; EventTags tags = (options.valuesSet & EventSourceOptions.tagsSet) != 0 ? options.tags : eventTypes.Tags; EventKeywords keywords = (options.valuesSet & EventSourceOptions.keywordsSet) != 0 ? options.keywords : eventTypes.keywords; var nameInfo = eventTypes.GetNameInfo(eventName ?? eventTypes.Name, tags); if (nameInfo == null) { return; } identity = nameInfo.identity; EventDescriptor descriptor = new EventDescriptor(identity, level, opcode, (long)keywords); var pinCount = eventTypes.pinCount; var scratch = stackalloc byte[eventTypes.scratchSize]; var descriptors = stackalloc EventData[eventTypes.dataCount + 3]; var pins = stackalloc GCHandle[pinCount]; fixed(byte * pMetadata0 = this.providerMetadata, pMetadata1 = nameInfo.nameMetadata, pMetadata2 = eventTypes.typeMetadata) { descriptors[0].SetMetadata(pMetadata0, this.providerMetadata.Length, 2); descriptors[1].SetMetadata(pMetadata1, nameInfo.nameMetadata.Length, 1); descriptors[2].SetMetadata(pMetadata2, eventTypes.typeMetadata.Length, 1); #if (!ES_BUILD_PCL && !PROJECTN) System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegions(); #endif try { DataCollector.ThreadInstance.Enable( scratch, eventTypes.scratchSize, descriptors + 3, eventTypes.dataCount, pins, pinCount); for (int i = 0; i < eventTypes.typeInfos.Length; i++) { var info = eventTypes.typeInfos[i]; info.WriteData(TraceLoggingDataCollector.Instance, info.PropertyValueFactory(values[i])); } this.WriteEventRaw( eventName, ref descriptor, activityID, childActivityID, (int)(DataCollector.ThreadInstance.Finish() - descriptors), (IntPtr)descriptors); } finally { this.WriteCleanup(pins, pinCount); } } #endif // FEATURE_MANAGED_ETW }
public TypeAnalysis( Type dataType, EventDataAttribute?eventAttrib, List <Type> recursionCheck) { IEnumerable <PropertyInfo> propertyInfos = Statics.GetProperties(dataType); var propertyList = new List <PropertyAnalysis>(); foreach (PropertyInfo propertyInfo in propertyInfos) { if (Statics.HasCustomAttribute(propertyInfo, typeof(EventIgnoreAttribute))) { continue; } if (!propertyInfo.CanRead || propertyInfo.GetIndexParameters().Length != 0) { continue; } MethodInfo?getterInfo = Statics.GetGetMethod(propertyInfo); if (getterInfo == null) { continue; } if (getterInfo.IsStatic || !getterInfo.IsPublic) { continue; } Type propertyType = propertyInfo.PropertyType; var propertyTypeInfo = TraceLoggingTypeInfo.GetInstance(propertyType, recursionCheck); EventFieldAttribute?fieldAttribute = Statics.GetCustomAttribute <EventFieldAttribute>(propertyInfo); string propertyName = fieldAttribute != null && fieldAttribute.Name != null ? fieldAttribute.Name : Statics.ShouldOverrideFieldName(propertyInfo.Name) ? propertyTypeInfo.Name : propertyInfo.Name; propertyList.Add(new PropertyAnalysis( propertyName, propertyInfo, propertyTypeInfo, fieldAttribute)); } this.properties = propertyList.ToArray(); foreach (PropertyAnalysis property in this.properties) { TraceLoggingTypeInfo typeInfo = property.typeInfo; this.level = (EventLevel)Statics.Combine((int)typeInfo.Level, (int)this.level); this.opcode = (EventOpcode)Statics.Combine((int)typeInfo.Opcode, (int)this.opcode); this.keywords |= typeInfo.Keywords; this.tags |= typeInfo.Tags; } if (eventAttrib != null) { this.level = (EventLevel)Statics.Combine((int)eventAttrib.Level, (int)this.level); this.opcode = (EventOpcode)Statics.Combine((int)eventAttrib.Opcode, (int)this.opcode); this.keywords |= eventAttrib.Keywords; this.tags |= eventAttrib.Tags; this.name = eventAttrib.Name; } if (this.name == null) { this.name = dataType.Name; } }
public Builder WithEventTags(EventTags eventTags) { EventTags = eventTags; return(this); }
internal TraceLoggingTypeInfo(Type dataType, string name, EventLevel level, EventOpcode opcode, EventKeywords keywords, EventTags tags) { if (dataType == (Type)null) { throw new ArgumentNullException("dataType"); } if (name == null) { throw new ArgumentNullException("eventName"); } Statics.CheckName(name); this.name = name; this.keywords = keywords; this.level = level; this.opcode = opcode; this.tags = tags; this.dataType = dataType; }
public void Init() { //App.Database.ClearTables(); //for debbug App.Database.DropTables(); App.Database.CreateTables(); var eventList = App.Database.GetEventsAsync(); if (eventList.Count == 0) { _ = App.Database.SaveEventAsync(new Event { Id = 1, Title = "Фестиваль японской культуры во Владивостоке 6+", Image = "https://omaikane.files.wordpress.com/2018/04/ely-melbmadfest2017-omaikane-14.jpg?w=1200", Info = "Любите «Наруто» и творчество Миядзаки? " + "Завидуете японской средневековой моде и мечтаете о кимоно? " + "Ваши друзья уже освоили разговорный японский, потому что вы с ними общаетесь " + "исключительно на языке страны восходящего солнца? Тогда обязательно приходите " + "на первый ежегодный фестиваль японской культуры! Вас ждут мастер-классы, конкурсы и, " + "конечно же, традиционная чайная церемония.\nРасписание мероприятия: \n9:00 – 10:30 – " + "регистрация\n10:40 – 12:00 – лекция и мастер-класс «Кумихимо. История японского шнура» " + "\n12:10 – 13:00 – Дебаты «Чем 2D лучше, чем 3D»\n13:10 – 14:30 – конкурс поедания рамена " + "\n14:40 – 16:00 – мастер-класс «Рисунок в стиле аниме»\n16:10 – 18:00 – просмотр фильма " + "«Унесенные призраками» под открытым небом\n18:10 – 19:00 – конкурс косплея\n19:10 – 20:00 –" + " конкурс песни на японском\n20:10 – 20:30 – выступление спонсоров конкурса\n20:40 – 22:00 – " + "самая большая в истории Владивостока чайная церемония (лекция и дегустация)\n22:10 – 23:00 – " + "закрытие фестиваля", Date = new DateTime(2020, 2, 28, 9, 0, 0), Address = "Центральная площадь (площадь Борцам за власть Советов)", CreatorId = 1 }).Result; _ = App.Database.SaveEventAsync(new Event { Id = 2, Title = "Соревнования по спортивному ориентированию 6+", Image = "https://kudago.com/media/images/event/aa/79/aa790c13fc0c1639855ef74ee79f13ef.jpg", Info = "Остров Русский встречает юных и не очень любителей спортивного ориентирования! " + "Вас ждут уникальные природные пейзажи острова и море веселья! Помните, в соревновании " + "можно участвовать как в одиночку, так и командой (3-6 человек), то есть, у вас есть шанс" + " всей семьей побороться за первое место и потрясающие призы! На мероприятии будет организован " + "пункт первой помощи и бесплатный чай с пирожками для участников от наших спонсоров" + " АО«Владхлеб»\nПобедители будут награждены призами от «Спортмастера» и «Приморского кондитера»", Date = new DateTime(2020, 1, 20, 8, 0, 0), Address = "Кампус ДВФУ, главный корпус (6 уровень)", CreatorId = 1 }).Result; _ = App.Database.SaveEventAsync(new Event { Id = 3, Title = "Благотворительный кинопросмотр в «Уссури» 0+", Image = "https://st.kp.yandex.net/im/poster/1/5/2/kinopoisk.ru-The-Lion-King-1529082--o--.jpg", Info = "Благотворительный фонд «Одной крови» совместно с кинотеатром «Уссури» " + "устраивает благотворительный показ мультфильма «Король Лев». Вырученные средства " + "пойдут на покупку игрушек в Арсеньевский детский дом." + "\nСтоимость: 100 рублей", Date = new DateTime(2020, 2, 12, 15, 0, 0), Address = "Кинотеатр «Уссури»", CreatorId = 1 }).Result; _ = App.Database.SaveEventAsync(new Event { Id = 4, Title = "Вечеринка в стиле 90-ых!!! 18+", Image = "https://heaclub.ru/tim/d2e75bf14e84910455579b84fc3c29ae.jpg", Info = "Ностальгируете по Юрке Шатунову и Сережке Жукову? Или с тоской " + "смотрите семейные фотоальбомы и завидуете родителям, отрывавшимся на вечеринках 90-ых?" + " Тогда ждем вас на потрясающую вечеринку в «San Remo» Вас будет развлекать диджей " + "Biba, а наша команда барменов презентует новые коктейли, придуманные специально для вечеринки!" + "\nСтоимость: 300 рублей", Date = new DateTime(2021, 2, 1, 21, 0, 0), Address = "«San Remo»", CreatorId = 1 }).Result; _ = App.Database.SaveEventAsync(new Event { Id = 5, Title = "Открытая лекция «Метемпсихоз в творчестве Гумилева» 12+", Image = "https://alif.tv/wp-content/uploads/2017/11/gumilev.jpg", Info = "В рамках проекта «Тени Серебрянного века» проводится открытая лекция " + "по творчеству Николая Степановича Гумилева. Наш лектор, А. У. Есиль, подготовил " + "уникальный материал по теме переселения душ в творчестве Гумилева, где он расскажет " + "простыми словами о сложном. Лекция ориентирована на широкого слушателя, но даже специалисты" + " могут узнать много нового о творчестве поэта. По просьбам слушателей в конце мероприятия" + " будет организован открытый микрофон, на площадке которого каждый желающий может зачитать" + " свои любимые стихотворения Гумилева.", Date = new DateTime(2020, 3, 26, 17, 0, 0), Address = "Кампус ДВФУ, коворкинг «Аякс»", CreatorId = 1 }).Result; _ = App.Database.SaveEventAsync(new Event { Id = 6, Title = "Шоу мыльных пузырей на Арбате 0+", Image = "https://sun9-36.userapi.com/c200620/v200620880/3e460/IwYT_jPc39Q.jpg", Info = "Маленькие звездочки из цирковой студии «Мальвина» подготовили удивительный " + "подарок для жителей и гостей города! В первый февральский день они выступят с программой" + " «Волшебные пузырики» на одной из самых любимых улиц города.\nДевочки и мальчики" + " из студии только недавно вернулись из Москвы, где представили эту программу" + " на всероссийском детском цирковом конкурсе «Русский цирк 2019», где заняли " + "2 месте, и теперь они хотят подарить нам немного мыльного сияющего волшебства. " + "\nОдновременно с выступлением на улице расположатся лавки с поделками, сделанными умелыми " + "ручками малышей из центра дошкольной подготовки «Огонек».\n20 % из вырученных средств" + " пойдут на покупку подарков детям, проходящем лечение в онкологической больнице города.", Date = new DateTime(2020, 5, 6, 15, 0, 0), Address = "Улица адмирала Фокина", CreatorId = 5 }).Result; _ = App.Database.SaveEventAsync(new Event { Id = 7, Title = "Городской субботник в Покровском парке 0+", Image = "https://sun9-66.userapi.com/c858120/v858120881/158c9e/AMhYNyxhuio.jpg", Info = "Дорогие друзья, приглашаем Вас принять участие в субботнике, организованном " + "молодежной волонтерской организацией «Мать-земля»! Покровский парк – это место прогулок" + " с детьми, встреч возлюбленных, да и просто отдыха среди деревьев в самом центре " + "шумного города.\nМы должны ценить и беречь это место! Давайте объединим наши силы и" + " очистим наш дорогой парк от мусора, грязи и прошлогодней листвы!\nВсем участникам" + " субботника будут выданы памятные грамоты.", Date = new DateTime(2020, 6, 21, 9, 0, 0), Address = "Покровский парк", CreatorId = 1, }).Result; } var userList = App.Database.GetUsersAsync().Result; if (userList.Count == 0) { User newUs = new User() { FirstName = "Admin", SecondName = "", Email = "*****@*****.**", Password = "******", Age = 20, Sex = "male", Info = "I'm admin!", Image = "https://whatsism.com/uploads/posts/2019-07/1563281010_83b1f339-d4cb-46d4-82d8-8a0ee692f3e0.jpeg", IsAdmin = true }; _ = App.Database.SaveUserAsync(newUs); newUs = new User() { FirstName = "Александр", SecondName = "Шереметьев", Email = "*****@*****.**", Password = "******", Age = 21, Sex = "male", Info = "Моя жена за рулем – прямо молния! – Что, так быстро ездит? – Нет, попадает в деревьяXDDDD", Image = "https://images.wallpaperscraft.ru/image/kotenok_trava_sidet_nablyudat_lyubopytstvo_56204_1600x1200.jpg", IsAdmin = false }; _ = App.Database.SaveUserAsync(newUs); newUs = new User() { FirstName = "Антон", SecondName = "Потапов", Email = "*****@*****.**", Password = "******", Age = 20, Sex = "male", Info = "Кто завалит экзамен, тот сдохнет))0)", Image = "https://static.myfigurecollection.net/upload/pictures/2019/11/13/2331747.png", IsAdmin = false }; _ = App.Database.SaveUserAsync(newUs); newUs = new User() { FirstName = "Елена", SecondName = "Арнаут", Email = "*****@*****.**", Password = "******", Age = 49, Sex = "female", Info = "Очень люблю посещать всякие мероприятия, выставки! Ищу новых друзей! У меня есть МУЖ, просьба МУЖЧИНАМ не писать!", Image = "https://mtdata.ru/u9/photo3142/20798787621-0/original.jpg", IsAdmin = false }; _ = App.Database.SaveUserAsync(newUs); newUs = new User() { FirstName = "Андрей", SecondName = "Волшебный", Email = "*****@*****.**", Password = "******", Age = 35, Sex = "male", Info = "Закончил Хогвартс", Image = "https://pbs.twimg.com/media/C9cAX5GXgAA_Nuj.jpg", IsAdmin = false }; _ = App.Database.SaveUserAsync(newUs); newUs = new User() { FirstName = "Арина", SecondName = "Риврихина", Email = "*****@*****.**", Password = "******", Age = 27, Sex = "female", Info = "Студентка аспирантуры ДВФУ, живу на острове Русском. Ищу друзей для походов в кино!", Image = "https://avatars.mds.yandex.net/get-zen_doc/169683/pub_5cb01b376db23800b0264ec1_5cb01e9a6257ee00b3c6ae04/scale_1200", IsAdmin = false }; _ = App.Database.SaveUserAsync(newUs); } var tagList = App.Database.GetTagsAsync().Result; List <string> tagNames = new List <string> { "лес", "спортивное_ориентирование", "уссури", "кино", "благотворительность", "однойкрови", "аниме", "япония", "косплей", "фестиваль", "поэзия", "гумилев", "серебрянныйвек", "аякс", "тенисеребрянноговека", "шоу", "мыльные_пузыри", "мальвина", "огонек", "благотворительность", "вечеринка", "отдых", "покровскийпарк", "субботник", "природа", "экология", "волонтерство" }; if (tagList.Count == 0) { int i = 0; foreach (var tagName in tagNames) { Tag newTag = new Tag() { Title = tagName, Id = ++i }; _ = App.Database.SaveTagAsync(newTag).Result; } } //1 фестиваль 2 соревнование 3 кино 4 вечеринка 5 лекция 6 пузыри 7 субботник var eventTagsList = App.Database.GetEventTagsAsync().Result; if (eventTagsList.Count == 0) { var e1tags = new List <string> { "аниме", "япония", "косплей", "фестиваль" }; foreach (var tagName in e1tags) { EventTags newET = new EventTags() { EventId = 1, TagId = tagNames.FindIndex(c => c == tagName) + 1 }; App.Database.SaveEventTagAsync(newET); } var e2tags = new List <string> { "лес", "природа", "спортивное_ориентирование" }; foreach (var tagName in e2tags) { EventTags newET = new EventTags() { EventId = 2, TagId = tagNames.FindIndex(c => c == tagName) + 1 }; App.Database.SaveEventTagAsync(newET); } var e3tags = new List <string> { "уссури", "кино", "благотворительность", "однойкрови" }; foreach (var tagName in e3tags) { EventTags newET = new EventTags() { EventId = 3, TagId = tagNames.FindIndex(c => c == tagName) + 1 }; App.Database.SaveEventTagAsync(newET); } var e4tags = new List <string> { "вечеринка", "отдых" }; foreach (var tagName in e4tags) { EventTags newET = new EventTags() { EventId = 4, TagId = tagNames.FindIndex(c => c == tagName) + 1 }; App.Database.SaveEventTagAsync(newET); } var e5tags = new List <string> { "поэзия", "гумилев", "серебрянныйвек", "аякс", "тенисеребрянноговека" }; foreach (var tagName in e5tags) { EventTags newET = new EventTags() { EventId = 5, TagId = tagNames.FindIndex(c => c == tagName) + 1 }; App.Database.SaveEventTagAsync(newET); } var e6tags = new List <string> { "шоу", "мыльные_пузыри", "мальвина", "огонек", "благотворительность" }; foreach (var tagName in e6tags) { EventTags newET = new EventTags() { EventId = 6, TagId = tagNames.FindIndex(c => c == tagName) + 1 }; App.Database.SaveEventTagAsync(newET); } var e7tags = new List <string> { "покровскийпарк", "субботник", "природа", "экология", "волонтерство" }; foreach (var tagName in e7tags) { EventTags newET = new EventTags() { EventId = 7, TagId = tagNames.FindIndex(c => c == tagName) + 1 }; App.Database.SaveEventTagAsync(newET); } } var userEventsList = App.Database.GetUserEventsAsync().Result; if (userEventsList.Count == 0) { UserEvents newUE = new UserEvents() { EventId = 1, UserId = 2 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 1, UserId = 3 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 2, UserId = 3 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 3, UserId = 3 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 3, UserId = 2 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 4, UserId = 3 }; newUE = new UserEvents() { EventId = 6, UserId = 7 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 6, UserId = 6 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 1, UserId = 7 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 5, UserId = 3 }; App.Database.SaveUserEventAsync(newUE); newUE = new UserEvents() { EventId = 4, UserId = 5 }; App.Database.SaveUserEventAsync(newUE); } }
/// <summary> /// Sends conversion event to Optimizely. /// </summary> /// <param name="eventKey">Event key representing the event which needs to be recorded</param> /// <param name="userId">ID for user</param> /// <param name="userAttributes">Attributes of the user</param> /// <param name="eventTags">eventTags array Hash representing metadata associated with the event.</param> public void Track(string eventKey, string userId, UserAttributes userAttributes = null, EventTags eventTags = null) { if (!IsValid) { Logger.Log(LogLevel.ERROR, "Datafile has invalid format. Failing 'track'."); return; } var inputValues = new Dictionary <string, string> { { USER_ID, userId }, { EVENT_KEY, eventKey } }; if (!ValidateStringInputs(inputValues)) { return; } var eevent = Config.GetEvent(eventKey); if (eevent.Key == null) { Logger.Log(LogLevel.INFO, string.Format("Not tracking user {0} for event {1}.", userId, eventKey)); return; } if (eventTags != null) { eventTags = eventTags.FilterNullValues(Logger); } var conversionEvent = EventBuilder.CreateConversionEvent(Config, eventKey, userId, userAttributes, eventTags); Logger.Log(LogLevel.INFO, string.Format("Tracking event {0} for user {1}.", eventKey, userId)); Logger.Log(LogLevel.DEBUG, string.Format("Dispatching conversion event to URL {0} with params {1}.", conversionEvent.Url, conversionEvent.GetParamsAsJson())); try { EventDispatcher.DispatchEvent(conversionEvent); } catch (Exception exception) { Logger.Log(LogLevel.ERROR, string.Format("Unable to dispatch conversion event. Error {0}", exception.Message)); } NotificationCenter.SendNotifications(NotificationCenter.NotificationType.Track, eventKey, userId, userAttributes, eventTags, conversionEvent); }
public IActionResult Edit(int id, Event newEvent) { ViewBag.Teachers = _context.Teachers.ToList(); ViewBag.Tags = _context.Tags.ToList(); Event existEvent = _context.Events.FirstOrDefault(x => x.Id == id); if (existEvent == null) { return(RedirectToAction("index")); } if (newEvent.ImageFile != null) { if (newEvent.ImageFile.ContentType != "image/png" && newEvent.ImageFile.ContentType != "image/jpeg") { ModelState.AddModelError("ImageFile", "Jpeg ve ya png formatinda file daxil edilmelidir"); return(View()); } if (newEvent.ImageFile.Length > (1024 * 1024) * 5) { ModelState.AddModelError("ImageFile", "File olcusu 5mb-dan cox olmaz!"); return(View()); } string rootPath = _env.WebRootPath; var fileName = Guid.NewGuid().ToString() + newEvent.ImageFile.FileName; var path = Path.Combine(rootPath, "uploads/event", fileName); using (FileStream stream = new FileStream(path, FileMode.Create)) { newEvent.ImageFile.CopyTo(stream); } if (existEvent.Image != null) { string existPath = Path.Combine(_env.WebRootPath, "uploads/event", existEvent.Image); if (System.IO.File.Exists(existPath)) { System.IO.File.Delete(existPath); } } existEvent.Image = fileName; } if (!ModelState.IsValid) { return(View()); } var existTags = _context.EventTags.Where(x => x.EventId == id).ToList(); if (newEvent.TagIds != null) { foreach (var tagId in newEvent.TagIds) { var existTag = existTags.FirstOrDefault(x => x.TagId == tagId); if (existTag == null) { EventTags eventTag = new EventTags { EventId = id, TagId = tagId }; _context.EventTags.Add(eventTag); } else { existTags.Remove(existTag); } } } _context.EventTags.RemoveRange(existTags); var existTeachers = _context.EventTeachers.Where(x => x.EventId == id).ToList(); if (newEvent.TeacherIds != null) { foreach (var eventId in newEvent.TeacherIds) { var existTeacher = existTeachers.FirstOrDefault(x => x.TeacherId == eventId); if (existTeacher == null) { EventTags eventTeacher = new EventTags { EventId = id, TagId = eventId }; _context.EventTags.Add(eventTeacher); } else { existTeachers.Remove(existTeacher); } } } _context.EventTeachers.RemoveRange(existTeachers); existEvent.Name = newEvent.Name; existEvent.StartTime = newEvent.StartTime; existEvent.EndTime = newEvent.EndTime; existEvent.City = newEvent.City; existEvent.About = newEvent.About; existEvent.CreatedAt = newEvent.CreatedAt; _context.SaveChanges(); return(RedirectToAction("index")); }
private void Expect(string experimentId, string variationId, string eventName, string visitorId, UserAttributes attributes, EventTags tags) { var expectedEvent = new CanonicalEvent(experimentId, variationId, eventName, visitorId, attributes, tags); ExpectedEvents.Add(expectedEvent); }
public void ExpectConversion(string eventName, string userId, UserAttributes attributes = null, EventTags tags = null) { Expect(null, null, eventName, userId, attributes, tags); }
/// <summary> /// Sends conversion event to Optimizely. /// </summary> /// <param name="eventKey">Event key representing the event which needs to be recorded</param> /// <param name="userId">ID for user</param> /// <param name="userAttributes">Attributes of the user</param> /// <param name="eventTags">eventTags array Hash representing metadata associated with the event.</param> public void Track(string eventKey, string userId, UserAttributes userAttributes = null, EventTags eventTags = null) { if (!IsValid) { Logger.Log(LogLevel.ERROR, "Datafile has invalid format. Failing 'track'."); return; } var inputValues = new Dictionary <string, string> { { USER_ID, userId }, { EVENT_KEY, eventKey } }; if (!ValidateStringInputs(inputValues)) { return; } var eevent = Config.GetEvent(eventKey); if (eevent.Key == null) { Logger.Log(LogLevel.ERROR, string.Format("Not tracking user {0} for event {1}.", userId, eventKey)); return; } // Filter out experiments that are not running or when user(s) do not meet conditions. var validExperimentIdToVariationMap = new Dictionary <string, Variation>(); var experimentIds = eevent.ExperimentIds; foreach (string id in eevent.ExperimentIds) { var experiment = Config.GetExperimentFromId(id); //Validate experiment var variation = DecisionService.GetVariation(experiment, userId, userAttributes); if (variation != null) { validExperimentIdToVariationMap[experiment.Id] = variation; } else { Logger.Log(LogLevel.INFO, string.Format("Not tracking user \"{0}\" for experiment \"{1}\"", userId, experiment.Key)); } } if (validExperimentIdToVariationMap.Count > 0) { if (userAttributes != null) { userAttributes = userAttributes.FilterNullValues(Logger); } if (eventTags != null) { eventTags = eventTags.FilterNullValues(Logger); } var conversionEvent = EventBuilder.CreateConversionEvent(Config, eventKey, validExperimentIdToVariationMap, userId, userAttributes, eventTags); Logger.Log(LogLevel.INFO, string.Format("Tracking event {0} for user {1}.", eventKey, userId)); Logger.Log(LogLevel.DEBUG, string.Format("Dispatching conversion event to URL {0} with params {1}.", conversionEvent.Url, conversionEvent.GetParamsAsJson())); try { EventDispatcher.DispatchEvent(conversionEvent); } catch (Exception exception) { Logger.Log(LogLevel.ERROR, string.Format("Unable to dispatch conversion event. Error {0}", exception.Message)); } NotificationCenter.SendNotifications(NotificationCenter.NotificationType.Track, eventKey, userId, userAttributes, eventTags, conversionEvent); } else { Logger.Log(LogLevel.INFO, string.Format("There are no valid experiments for event {0} to track.", eventKey)); } }
/// <summary> /// Sends conversion event to Optimizely. /// </summary> /// <param name="eventKey">Event key representing the event which needs to be recorded</param> /// <param name="userId">ID for user</param> /// <param name="userAttributes">Attributes of the user</param> /// <param name="eventTags">eventTags array Hash representing metadata associated with the event.</param> public void Track(string eventKey, string userId, UserAttributes userAttributes = null, EventTags eventTags = null) { var config = ProjectConfigManager?.GetConfig(); if (config == null) { Logger.Log(LogLevel.ERROR, "Datafile has invalid format. Failing 'Track'."); return; } var inputValues = new Dictionary <string, string> { { USER_ID, userId }, { EVENT_KEY, eventKey } }; if (!ValidateStringInputs(inputValues)) { return; } var eevent = config.GetEvent(eventKey); if (eevent.Key == null) { Logger.Log(LogLevel.INFO, string.Format("Not tracking user {0} for event {1}.", userId, eventKey)); return; } if (eventTags != null) { eventTags = eventTags.FilterNullValues(Logger); } var userEvent = UserEventFactory.CreateConversionEvent(config, eventKey, userId, userAttributes, eventTags); EventProcessor.Process(userEvent); Logger.Log(LogLevel.INFO, string.Format("Tracking event {0} for user {1}.", eventKey, userId)); if (NotificationCenter.GetNotificationCount(NotificationCenter.NotificationType.Track) > 0) { var conversionEvent = EventFactory.CreateLogEvent(userEvent, Logger); NotificationCenter.SendNotifications(NotificationCenter.NotificationType.Track, eventKey, userId, userAttributes, eventTags, conversionEvent); } }
internal NameInfo GetNameInfo(string name, EventTags tags) => this.nameInfos.TryGet(new KeyValuePair <string, EventTags>(name, tags)) ?? this.nameInfos.GetOrAdd(new NameInfo(name, tags, this.typeMetadata.Length));
/// <summary> /// Create conversion event to be sent to the logging endpoint. /// </summary> /// <param name="config">ProjectConfig Configuration for the project.</param> /// <param name="eventKey">Event Key representing the event</param> /// <param name="ExperimentIdVariationMap">Map of experiment ID to the variation that the user is bucketed into.</param> /// <param name="userId">ID of user</param> /// <param name="userAttributes">associative array of Attributes for the user</param> /// <param name="eventValue">integer Value associated with the event</param> /// <returns>LogEvent object to be sent to dispatcher</returns> public virtual LogEvent CreateConversionEvent(ProjectConfig config, string eventKey, Dictionary <string, Variation> experimentIdVariationMap, string userId, UserAttributes userAttributes, EventTags eventTags) { var commonParams = GetCommonParams(config, userId, userAttributes ?? new UserAttributes()); var conversionOnlyParams = GetConversionParams(config, eventKey, experimentIdVariationMap, userId, eventTags).ToArray(); var conversionParams = GetImpressionOrConversionParamsWithCommonParams(commonParams, conversionOnlyParams); return(new LogEvent(CONVERSION_ENDPOINT, conversionParams, HTTP_VERB, HTTP_HEADERS)); }
private unsafe void WriteToAllListeners(string eventName, ref EventDescriptor eventDescriptor, EventTags tags, Guid *pActivityId, EventPayload payload) { EventWrittenEventArgs eventCallbackArgs = new EventWrittenEventArgs(this); eventCallbackArgs.EventName = eventName; eventCallbackArgs.m_level = (EventLevel)eventDescriptor.Level; eventCallbackArgs.m_keywords = (EventKeywords)eventDescriptor.Keywords; eventCallbackArgs.m_opcode = (EventOpcode)eventDescriptor.Opcode; eventCallbackArgs.m_tags = tags; // Self described events do not have an id attached. We mark it internally with -1. eventCallbackArgs.EventId = -1; if (pActivityId != null) { eventCallbackArgs.RelatedActivityId = *pActivityId; } if (payload != null) { eventCallbackArgs.Payload = new ReadOnlyCollection <object>((IList <object>)payload.Values); eventCallbackArgs.PayloadNames = new ReadOnlyCollection <string>((IList <string>)payload.Keys); } DispatchToAllListeners(-1, pActivityId, eventCallbackArgs); }
protected TraceLoggingTypeInfo(string name, EventLevel level, EventOpcode opcode, EventKeywords keywords, EventTags tags) : base(typeof(DataType), name, level, opcode, keywords, tags) { }
public EventMetadata(EventDescriptor descriptor, EventTags tags, bool enabledForAnyListener, bool enabledForETW, string name, string message, EventParameterType[] parameterTypes) { this.Descriptor = descriptor; this.Tags = tags; this.EnabledForAnyListener = enabledForAnyListener; this.EnabledForETW = enabledForETW; this.TriggersActivityTracking = 0; this.Name = name; this.Message = message; this.Parameters = null; this.TraceLoggingEventTypes = null; this.ActivityOptions = EventActivityOptions.None; this.ParameterTypes = parameterTypes; this.HasRelatedActivityID = false; }
internal TraceLoggingEventTypes(string name, EventTags tags, params TraceLoggingTypeInfo[] typeInfos) : this(tags, name, TraceLoggingEventTypes.MakeArray(typeInfos)) { }
public TypeAnalysis( Type dataType, EventDataAttribute eventAttrib, List<Type> recursionCheck) { var propertyInfos = Statics.GetProperties(dataType); var propertyList = new List<PropertyAnalysis>(); foreach (var propertyInfo in propertyInfos) { if (Statics.HasCustomAttribute(propertyInfo, typeof(EventIgnoreAttribute))) { continue; } if (!propertyInfo.CanRead || propertyInfo.GetIndexParameters().Length != 0) { continue; } MethodInfo getterInfo = Statics.GetGetMethod(propertyInfo); if (getterInfo == null) { continue; } if (getterInfo.IsStatic || !getterInfo.IsPublic) { continue; } var propertyType = propertyInfo.PropertyType; var propertyTypeInfo = Statics.GetTypeInfoInstance(propertyType, recursionCheck); var fieldAttribute = Statics.GetCustomAttribute<EventFieldAttribute>(propertyInfo); string propertyName = fieldAttribute != null && fieldAttribute.Name != null ? fieldAttribute.Name : Statics.ShouldOverrideFieldName(propertyInfo.Name) ? propertyTypeInfo.Name : propertyInfo.Name; propertyList.Add(new PropertyAnalysis( propertyName, getterInfo, propertyTypeInfo, fieldAttribute)); } this.properties = propertyList.ToArray(); foreach (var property in this.properties) { var typeInfo = property.typeInfo; this.level = (EventLevel)Statics.Combine((int)typeInfo.Level, (int)this.level); this.opcode = (EventOpcode)Statics.Combine((int)typeInfo.Opcode, (int)this.opcode); this.keywords |= typeInfo.Keywords; this.tags |= typeInfo.Tags; } if (eventAttrib != null) { this.level = (EventLevel)Statics.Combine((int)eventAttrib.Level, (int)this.level); this.opcode = (EventOpcode)Statics.Combine((int)eventAttrib.Opcode, (int)this.opcode); this.keywords |= eventAttrib.Keywords; this.tags |= eventAttrib.Tags; this.name = eventAttrib.Name; } if (this.name == null) { this.name = dataType.Name; } }
public void PopulateEvent(Event ev) { if (MinDate.HasValue || MaxDate.HasValue) { ev.Date = RandomData.GetDateTime(MinDate ?? DateTime.MinValue, MaxDate ?? DateTime.MaxValue); } ev.Type = new [] { Event.KnownTypes.Error, Event.KnownTypes.FeatureUsage, Event.KnownTypes.Log, Event.KnownTypes.NotFound }.Random(); if (ev.Type == Event.KnownTypes.FeatureUsage) { ev.Source = FeatureNames.Random(); } else if (ev.Type == Event.KnownTypes.NotFound) { ev.Source = PageNames.Random(); } else if (ev.Type == Event.KnownTypes.Log) { ev.Source = LogSources.Random(); ev.Message = RandomData.GetString(); string level = LogLevels.Random(); if (!String.IsNullOrEmpty(level)) { ev.Data[Event.KnownDataKeys.Level] = level; } } if (RandomData.GetBool(80)) { ev.Geo = RandomData.GetCoordinate(); } if (RandomData.GetBool(20)) { ev.Value = RandomData.GetInt(0, 10000); } ev.SetUserIdentity(Identities.Random()); ev.SetVersion(RandomData.GetVersion("2.0", "4.0")); ev.AddRequestInfo(new RequestInfo { //ClientIpAddress = ClientIpAddresses.Random(), Path = PageNames.Random() }); ev.Data.Add(Event.KnownDataKeys.EnvironmentInfo, new EnvironmentInfo { IpAddress = MachineIpAddresses.Random() + ", " + MachineIpAddresses.Random(), MachineName = MachineNames.Random() }); for (int i = 0; i < RandomData.GetInt(1, 3); i++) { string key = RandomData.GetWord(); while (ev.Data.ContainsKey(key) || key == Event.KnownDataKeys.Error) { key = RandomData.GetWord(); } ev.Data.Add(key, RandomData.GetString()); } int tagCount = RandomData.GetInt(1, 3); for (int i = 0; i < tagCount; i++) { string tag = EventTags.Random(); if (!ev.Tags.Contains(tag)) { ev.Tags.Add(tag); } } if (ev.Type == Event.KnownTypes.Error) { if (RandomData.GetBool()) { // limit error variation so that stacking will occur if (_randomErrors == null) { _randomErrors = new List <Error>(Enumerable.Range(1, 25).Select(i => GenerateError())); } ev.Data[Event.KnownDataKeys.Error] = _randomErrors.Random(); } else { // limit error variation so that stacking will occur if (_randomSimpleErrors == null) { _randomSimpleErrors = new List <SimpleError>(Enumerable.Range(1, 25).Select(i => GenerateSimpleError())); } ev.Data[Event.KnownDataKeys.SimpleError] = _randomSimpleErrors.Random(); } } }
internal NameInfo GetNameInfo(string name, EventTags tags) { var ret = this.nameInfos.TryGet(new KeyValuePair<string, EventTags>(name, tags)); if (ret == null) { ret = this.nameInfos.GetOrAdd(new NameInfo(name, tags, this.typeMetadata.Length)); } return ret; }
public InMemoryCachedDepartmentRepository(IEventStore eventStore) { _eventStore = eventStore; tag = EventTags.GetOrCreateIfNotExists(typeof(Department)); }
internal TraceLoggingEventTypes( string name, EventTags tags, System.Reflection.ParameterInfo[] paramInfos) { if (name == null) { throw new ArgumentNullException("name"); } Contract.EndContractBlock(); this.typeInfos = MakeArray(paramInfos); this.name = name; this.tags = tags; this.level = Statics.DefaultLevel; var collector = new TraceLoggingMetadataCollector(); for (int i = 0; i < typeInfos.Length; ++i) { var typeInfo = typeInfos[i]; this.level = Statics.Combine((int)typeInfo.Level, this.level); this.opcode = Statics.Combine((int)typeInfo.Opcode, this.opcode); this.keywords |= typeInfo.Keywords; var paramName = paramInfos[i].Name; if (Statics.ShouldOverrideFieldName(paramName)) { paramName = typeInfo.Name; } typeInfo.WriteMetadata(collector, paramName, EventFieldFormat.Default); } this.typeMetadata = collector.GetMetadata(); this.scratchSize = collector.ScratchSize; this.dataCount = collector.DataCount; this.pinCount = collector.PinCount; }
public CanonicalEvent(string experimentId, string variationId, string eventName, string visitorId, UserAttributes attributes, EventTags tags) { ExperimentId = experimentId; VariationId = variationId; EventName = eventName; VisitorId = visitorId; Attributes = attributes ?? new UserAttributes(); Tags = tags ?? new EventTags(); }