├── docker ├── Dockerfile.Linux ├── scripts │ ├── Add-InternalNugetFeed.ps1 │ └── Packaging │ │ └── generate-update-package.ps1 └── Dockerfile ├── scripts └── Unicorn │ ├── MicroCHAP.dll │ └── Sync.ps1 ├── src ├── Colossus.Integration │ ├── Colossus.ashx │ ├── Models │ │ ├── ExmEvent.cs │ │ ├── PageDefinition.cs │ │ ├── RenderingInfo.cs │ │ └── SitecoreVisitContext.cs │ ├── Processing │ │ ├── RequestAction.cs │ │ ├── TriggerEventData.cs │ │ ├── TriggerOutcomeData.cs │ │ ├── ISessionPatcher.cs │ │ ├── ChannelPatcher.cs │ │ ├── RequestInfoHelpers.cs │ │ ├── GeoPatcher.cs │ │ ├── TimePatcher.cs │ │ └── TriggerEventsAction.cs │ ├── ColossusHandler.cs │ ├── Behaviors │ │ └── SitecoreBehavior.cs │ ├── Properties │ │ ├── PublishProfiles │ │ │ └── local.pubxml │ │ └── AssemblyInfo.cs │ ├── App_Config │ │ └── Include │ │ │ └── Colossus │ │ │ └── Colossus.config │ ├── web.Debug.config │ └── web.Release.config ├── ExperienceGenerator.Client │ ├── Icon │ │ ├── Original.png │ │ ├── ExperienceGenerator.zip │ │ └── ExperienceGenerator │ │ │ ├── 16x16 │ │ │ └── Experience Generator.png │ │ │ ├── 24x24 │ │ │ └── Experience Generator.png │ │ │ ├── 32x32 │ │ │ └── Experience Generator.png │ │ │ └── 48x48 │ │ │ └── Experience Generator.png │ ├── Mapping │ │ ├── Mapping.zip │ │ └── test.htm │ ├── Global.asax │ ├── sitecore │ │ └── shell │ │ │ └── Themes │ │ │ └── Standard │ │ │ └── ExperienceGenerator.zip │ ├── Models │ │ ├── ContactPreset.cs │ │ ├── OptionTypes.cs │ │ ├── SelectionOptionGroup.cs │ │ ├── Preset.cs │ │ ├── SelectionOption.cs │ │ └── ConfigurationOptions.cs │ ├── App_Config │ │ └── Include │ │ │ ├── ExperienceGenerator │ │ │ ├── zExperienceGenerator.DevSettings.config │ │ │ └── ExperienceGenerator.Serialization.config │ │ │ └── Unicorn │ │ │ ├── Unicorn.PowerShell.config │ │ │ ├── Unicorn.UI.IdentityServer.config │ │ │ ├── Unicorn.zSharedSecret.config │ │ │ ├── Unicorn.Users.DataProvider.config │ │ │ ├── Unicorn.DataProvider.config │ │ │ └── Unicorn.Roles.DataProvider.config │ ├── Infrastructure │ │ ├── SitecoreRouteInitializer.cs │ │ └── XGenSitecoreJobManager.cs │ ├── Global.asax.cs │ ├── Templates.cs │ ├── KnownItems.cs │ ├── Properties │ │ ├── PublishProfiles │ │ │ └── local.pubxml │ │ └── AssemblyInfo.cs │ ├── Repositories │ │ └── ContactSettingsRepository.cs │ ├── App_Start │ │ └── WebApiConfig.cs │ ├── Web.Debug.config │ └── Web.Release.config ├── ExperienceGenerator │ ├── Data │ │ ├── CountriesByContinent.txt │ │ ├── Continent.cs │ │ ├── Region.cs │ │ ├── Device.cs │ │ ├── FileHelpers.cs │ │ └── DeviceRepository.cs │ ├── JobType.cs │ ├── Models │ │ ├── PageItemInfo.cs │ │ ├── SiteInfo.cs │ │ ├── JsonItemInfo.cs │ │ └── Interaction.cs │ ├── Parsing │ │ ├── JsonHelpers.cs │ │ ├── ParseConfig.cs │ │ └── Factories │ │ │ ├── VariableFactory.cs │ │ │ ├── LambdaFactory.cs │ │ │ ├── ContactDataVariable.cs │ │ │ ├── OutcomeVariable.cs │ │ │ ├── MonthFactory.cs │ │ │ └── IdentifiedContactDataVariable.cs │ ├── JobSpecification.cs │ ├── Services │ │ └── GetRandomCityService.cs │ ├── Repositories │ │ └── GeoDataRepository.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── app.config ├── Colossus │ ├── Statistics │ │ ├── IRandomGenerator.cs │ │ ├── DateRangeNotInitializedException.cs │ │ ├── PoissonGenerator.cs │ │ ├── LambdaGenerator.cs │ │ ├── TransformedRandom.cs │ │ ├── BetaGenerator.cs │ │ ├── WignerGenerator.cs │ │ ├── NormalGenerator.cs │ │ ├── WeightedRandom.cs │ │ ├── SkewNormalGenerator.cs │ │ ├── TruncatedRandom.cs │ │ ├── OffsetGenerator.cs │ │ ├── MathNetGenerator.cs │ │ ├── WeightedSetBuilder.cs │ │ ├── NoiseHelper.cs │ │ ├── LinearGenerator.cs │ │ └── ExponentialGenerator.cs │ ├── IVisitSimulator.cs │ ├── IVisitorBehavior.cs │ ├── Request.cs │ ├── IRequestContext.cs │ ├── Web │ │ ├── RequestEventArgs.cs │ │ ├── VisitEventArgs.cs │ │ ├── VisitInfo.cs │ │ ├── VisitorInfo.cs │ │ ├── SimulationObjectInfo.cs │ │ ├── RequestInfo.cs │ │ └── ResponseInfo.cs │ ├── Randomness.cs │ ├── IVisitRequestContext.cs │ ├── SimulationObject.cs │ ├── ContactBasedSimulator.cs │ ├── Visitor.cs │ ├── VisitorSegment.cs │ ├── CompositeVariable.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── SegmentBasedSimulator.cs │ ├── GetSetHelpers.cs │ └── Visit.cs ├── ExperienceGenerator.Exm │ ├── sitecore │ │ ├── EndSession.aspx │ │ ├── EndSession.aspx.cs │ │ ├── EndSession.aspx.designer.cs │ │ └── shell │ │ │ └── client │ │ │ └── Applications │ │ │ └── ExmExperienceGenerator │ │ │ └── DataRepository.js │ ├── Models │ │ ├── Preset.cs │ │ ├── ListSettings.cs │ │ ├── ExmGeneratorSettings.cs │ │ ├── SelectionOptionGroup.cs │ │ ├── MessageContactEvent.cs │ │ ├── RequestHeaderInfo.cs │ │ ├── SelectionOption.cs │ │ ├── Funnel.cs │ │ ├── CampaignSettings.cs │ │ └── MessageContactEvents.cs │ ├── Services │ │ ├── EventType.cs │ │ └── IndexService.cs │ ├── Infrastructure │ │ ├── SitecoreRouteInitializer.cs │ │ ├── LinqExtensions.cs │ │ └── UpdateFakeGeoData.cs │ ├── App_Config │ │ └── Include │ │ │ ├── Z.ExperienceGenerator │ │ │ └── zExperienceGenerator.Exm.DevSettings.config │ │ │ └── ExperienceGenerator │ │ │ └── ExmExperienceGenerator.Serialization.config │ ├── Templates.cs │ ├── Properties │ │ ├── PublishProfiles │ │ │ └── local.pubxml │ │ └── AssemblyInfo.cs │ └── App_Start │ │ └── WebApiConfig.cs ├── publishsettings.targets ├── serialization │ ├── ExperienceGenerator │ │ ├── ExperienceGenerator.Core.Application │ │ │ ├── ExperienceGenerator.yml │ │ │ ├── ExperienceGenerator │ │ │ │ ├── Common.yml │ │ │ │ ├── Common │ │ │ │ │ ├── Presets.yml │ │ │ │ │ ├── Contacts.yml │ │ │ │ │ ├── Templates.yml │ │ │ │ │ └── Templates │ │ │ │ │ │ ├── Settings Preset.yml │ │ │ │ │ │ └── Settings Preset │ │ │ │ │ │ ├── Data.yml │ │ │ │ │ │ └── Data │ │ │ │ │ │ └── Specification.yml │ │ │ │ ├── Contacts │ │ │ │ │ └── PageSettings │ │ │ │ │ │ ├── Lists.yml │ │ │ │ │ │ ├── Sliders.yml │ │ │ │ │ │ ├── DatePickers.yml │ │ │ │ │ │ ├── DialogWindows.yml │ │ │ │ │ │ ├── SearchEngines.yml │ │ │ │ │ │ ├── Texts │ │ │ │ │ │ ├── Overview.yml │ │ │ │ │ │ └── Overview │ │ │ │ │ │ │ ├── End date.yml │ │ │ │ │ │ │ ├── Start date.yml │ │ │ │ │ │ │ ├── Pageviews per visit avg.yml │ │ │ │ │ │ │ ├── Number of unique visitors.yml │ │ │ │ │ │ │ ├── Time spent per visit avg.yml │ │ │ │ │ │ │ ├── Annual increase in traffic.yml │ │ │ │ │ │ │ └── Number of visits generated.yml │ │ │ │ │ │ ├── Lists │ │ │ │ │ │ ├── GoalListSettings.yml │ │ │ │ │ │ ├── ContactListSettings.yml │ │ │ │ │ │ ├── OutcomeListSettings.yml │ │ │ │ │ │ ├── InteractionListSettings.yml │ │ │ │ │ │ ├── ContactListSettings │ │ │ │ │ │ │ ├── Email.yml │ │ │ │ │ │ │ ├── FirstName.yml │ │ │ │ │ │ │ └── LastName.yml │ │ │ │ │ │ ├── GoalListSettings │ │ │ │ │ │ │ └── Goal.yml │ │ │ │ │ │ └── OutcomeListSettings │ │ │ │ │ │ │ └── Outcome.yml │ │ │ │ │ │ ├── SearchEngines │ │ │ │ │ │ ├── Bing.yml │ │ │ │ │ │ └── Google.yml │ │ │ │ │ │ ├── DatePickers │ │ │ │ │ │ └── DatePicker Parameters.yml │ │ │ │ │ │ ├── Sliders │ │ │ │ │ │ └── Slider Parameters.yml │ │ │ │ │ │ └── Texts.yml │ │ │ │ └── DataSheet │ │ │ │ │ └── PageSettings │ │ │ │ │ ├── Sliders.yml │ │ │ │ │ ├── DatePickers.yml │ │ │ │ │ ├── DialogWindows.yml │ │ │ │ │ ├── Texts │ │ │ │ │ ├── Overview.yml │ │ │ │ │ └── Overview │ │ │ │ │ │ ├── End date.yml │ │ │ │ │ │ ├── Start date.yml │ │ │ │ │ │ ├── Number of unique visitors.yml │ │ │ │ │ │ ├── Pageviews per visit avg.yml │ │ │ │ │ │ ├── Time spent per visit avg.yml │ │ │ │ │ │ ├── Annual increase in traffic.yml │ │ │ │ │ │ └── Number of visits generated.yml │ │ │ │ │ ├── DatePickers │ │ │ │ │ └── DatePicker Parameters.yml │ │ │ │ │ ├── Sliders │ │ │ │ │ └── Slider Parameters.yml │ │ │ │ │ ├── Tabs.yml │ │ │ │ │ └── Texts.yml │ │ │ ├── 029018a9-f831-40a8-909f-720839afc078 │ │ │ │ └── Percentage identified visitors.yml │ │ │ └── b389f826-532d-426e-97f5-416a43d12b22 │ │ │ │ └── Percentage identified visitors.yml │ │ ├── ExperienceGenerator.Core.Application.Link │ │ │ └── Experience Generator.yml │ │ └── ExperienceGenerator.Core.Application.Contacts.Link │ │ │ └── Contact Experience Generator.yml │ └── ExmExperienceGenerator │ │ ├── ExmExperienceGenerator.Core.Application │ │ ├── ExmExperienceGenerator.yml │ │ ├── ExmExperienceGenerator │ │ │ ├── Common.yml │ │ │ ├── Common │ │ │ │ ├── Presets.yml │ │ │ │ ├── Templates.yml │ │ │ │ └── Templates │ │ │ │ │ ├── Settings Preset.yml │ │ │ │ │ └── Settings Preset │ │ │ │ │ ├── Data.yml │ │ │ │ │ └── Data │ │ │ │ │ └── Specification.yml │ │ │ └── ExmGenerator │ │ │ │ └── PageSettings │ │ │ │ ├── DatePickers.yml │ │ │ │ ├── Texts │ │ │ │ ├── Overview.yml │ │ │ │ ├── Overview │ │ │ │ │ ├── End date.yml │ │ │ │ │ └── Start date.yml │ │ │ │ └── Test summary.yml │ │ │ │ ├── List.yml │ │ │ │ ├── Dialogs.yml │ │ │ │ ├── Sliders.yml │ │ │ │ ├── DialogWindows.yml │ │ │ │ ├── DatePickers │ │ │ │ └── DatePicker Parameters.yml │ │ │ │ ├── List │ │ │ │ ├── Sent Messages.yml │ │ │ │ └── Sent Messages │ │ │ │ │ ├── Open rate.yml │ │ │ │ │ ├── Recipients.yml │ │ │ │ │ ├── Campaign name.yml │ │ │ │ │ └── Subject.yml │ │ │ │ └── Sliders │ │ │ │ └── Slider Parameters.yml │ │ ├── dac931a8-8851-4ddd-b96b-94d06b8714db │ │ │ └── PageSettings │ │ │ │ └── Tabs.yml │ │ └── 63f091f4-1812-4987-adfe-5a3a917b1722 │ │ │ └── Number of visits generated.yml │ │ └── ExmExperienceGenerator.Core.Button │ │ └── Exm Experience Generator.yml └── Api doc.txt ├── tools └── packages.config ├── .env ├── .vscode └── settings.json ├── .editorconfig ├── docker-compose.linux.yml ├── cake-config.json ├── nuget.config ├── docker-compose.yml └── appveyor.yml /docker/Dockerfile.Linux: -------------------------------------------------------------------------------- 1 | # escape=` 2 | 3 | ARG BASE_IMAGE 4 | 5 | FROM $BASE_IMAGE 6 | 7 | COPY docker/data/ . -------------------------------------------------------------------------------- /scripts/Unicorn/MicroCHAP.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/scripts/Unicorn/MicroCHAP.dll -------------------------------------------------------------------------------- /src/Colossus.Integration/Colossus.ashx: -------------------------------------------------------------------------------- 1 | <%@ WebHandler Language="C#" Class="Colossus.Integration.ColossusHandler" %> -------------------------------------------------------------------------------- /tools/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | SITECORE_VERSION=10.1.0 2 | ISOLATION=process 3 | REGISTRY=scr.sitecore.com/ 4 | WINDOWSSERVERCORE_VERSION=20H2 5 | NANOSERVER_VERSION=20H2 6 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Icon/Original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/Icon/Original.png -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Mapping/Mapping.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/Mapping/Mapping.zip -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="ExperienceGenerator.Client.WebApiApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Data/CountriesByContinent.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator/Data/CountriesByContinent.txt -------------------------------------------------------------------------------- /src/ExperienceGenerator/JobType.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator 2 | { 3 | public enum JobType 4 | { 5 | Visits = 0, 6 | Contacts = 1 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Icon/ExperienceGenerator.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/Icon/ExperienceGenerator.zip -------------------------------------------------------------------------------- /src/Colossus/Statistics/IRandomGenerator.cs: -------------------------------------------------------------------------------- 1 | namespace Colossus.Statistics 2 | { 3 | public interface IRandomGenerator 4 | { 5 | double Next(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/sitecore/EndSession.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EndSession.aspx.cs" Inherits="ExperienceGenerator.Exm.sitecore.EndSession" %> 2 | -------------------------------------------------------------------------------- /src/Colossus/IVisitSimulator.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Colossus 4 | { 5 | public interface IVisitSimulator 6 | { 7 | IEnumerable GetVisitors(int count); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Icon/ExperienceGenerator/16x16/Experience Generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/Icon/ExperienceGenerator/16x16/Experience Generator.png -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Icon/ExperienceGenerator/24x24/Experience Generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/Icon/ExperienceGenerator/24x24/Experience Generator.png -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Icon/ExperienceGenerator/32x32/Experience Generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/Icon/ExperienceGenerator/32x32/Experience Generator.png -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Icon/ExperienceGenerator/48x48/Experience Generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/Icon/ExperienceGenerator/48x48/Experience Generator.png -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/sitecore/shell/Themes/Standard/ExperienceGenerator.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sitecore/xGenerator/HEAD/src/ExperienceGenerator.Client/sitecore/shell/Themes/Standard/ExperienceGenerator.zip -------------------------------------------------------------------------------- /src/Colossus/IVisitorBehavior.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Colossus 4 | { 5 | public interface IVisitorBehavior 6 | { 7 | IEnumerable Commit(Visitor visitor); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/Preset.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Linq; 2 | 3 | namespace ExperienceGenerator.Exm.Models 4 | { 5 | public class Preset 6 | { 7 | public string Name { get; set; } 8 | 9 | public JObject Spec { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/Colossus.Integration/Models/ExmEvent.cs: -------------------------------------------------------------------------------- 1 | namespace Colossus.Integration.Models 2 | { 3 | public enum ExmEvent 4 | { 5 | Open, 6 | Click, 7 | Unsubscribe, 8 | UnsubscribeFromAll, 9 | Spam, 10 | Bounce 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "json.maxItemsComputed": 15000, 3 | "[json]": { 4 | "editor.defaultFormatter": "esbenp.prettier-vscode" 5 | }, 6 | "files.associations": { 7 | "build*.yml": "azure-pipelines", 8 | "docker*.yml": "yaml" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Models/ContactPreset.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Linq; 2 | 3 | namespace ExperienceGenerator.Client.Models 4 | { 5 | 6 | public class ContactPreset 7 | { 8 | public string Name { get; set; } 9 | 10 | public JArray Spec { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/ListSettings.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Exm.Models 2 | { 3 | public class ListSettings 4 | { 5 | public string Name { get; set; } 6 | public int Recipients { get; set; } 7 | public Job Job { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Services/EventType.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Exm.Services 2 | { 3 | public enum EventType 4 | { 5 | Open, 6 | Unsubscribe, 7 | UnsubscribeFromAll, 8 | Click, 9 | Bounce, 10 | SpamComplaint 11 | } 12 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/ExmGeneratorSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace ExperienceGenerator.Exm.Models 5 | { 6 | public class ExmGeneratorSettings : Dictionary 7 | { 8 | public Job Job { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Windows-style newlines with a newline ending every file 7 | # 4 spaces indentation 8 | [*] 9 | end_of_line = crlf 10 | insert_final_newline = true 11 | indent_style = space 12 | indent_size = 4 -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Models/OptionTypes.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Client.Models 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class OptionTypes 6 | { 7 | public string Type { get; set; } 8 | 9 | public IEnumerable OptionGroups { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/ExperienceGenerator/zExperienceGenerator.DevSettings.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Models/SelectionOptionGroup.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Client.Models 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class SelectionOptionGroup 6 | { 7 | public string Label { get; set; } 8 | 9 | public IEnumerable Options { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/SelectionOptionGroup.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace ExperienceGenerator.Exm.Models 4 | { 5 | public class SelectionOptionGroup 6 | { 7 | public string Label { get; set; } 8 | 9 | public IEnumerable Options { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/MessageContactEvent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using ExperienceGenerator.Exm.Services; 3 | 4 | namespace ExperienceGenerator.Exm.Models 5 | { 6 | public class MessageContactEvent 7 | { 8 | public DateTime EventTime { get; set; } 9 | public EventType EventType { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/publishsettings.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | http://xgenerator.dev.local 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Models/PageItemInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Newtonsoft.Json; 3 | 4 | namespace ExperienceGenerator.Models 5 | { 6 | public class PageItemInfo : JsonItemInfo 7 | { 8 | [JsonProperty("goals", Required = Required.Default)] 9 | public IEnumerable Goals { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /docker-compose.linux.yml: -------------------------------------------------------------------------------- 1 | version: "2.4" 2 | 3 | services: 4 | xGenerator: 5 | image: ${REGISTRY}community/modules/custom-xgenerator-assets:${SITECORE_VERSION}-linux 6 | isolation: ${ISOLATION} 7 | build: 8 | context: . 9 | dockerfile: ./docker/Dockerfile.Linux 10 | args: 11 | BASE_IMAGE: docker.io/alpine:3 12 | 13 | -------------------------------------------------------------------------------- /cake-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "WebsiteRoot": "C:\\inetpub\\wwwroot\\xgenerator.dev.local", 3 | "InstanceUrl": "https://xgenerator.dev.local/", 4 | "SolutionName": "ExperienceGenerator.sln", 5 | "ProjectFolder": "C:\\projects\\xGenerator", 6 | "BuildConfiguration": "Debug", 7 | "BuildToolVersions": "VS2019", 8 | "RunCleanBuilds": false 9 | } 10 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Models/Preset.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace ExperienceGenerator.Client.Models 7 | { 8 | using Newtonsoft.Json.Linq; 9 | 10 | public class Preset 11 | { 12 | public string Name { get; set; } 13 | 14 | public JObject Spec { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Colossus/Request.cs: -------------------------------------------------------------------------------- 1 | namespace Colossus 2 | { 3 | public class Request : SimulationObject 4 | { 5 | public Visit Visit { get; set; } 6 | 7 | public string Url { get; set; } 8 | 9 | public string Method { get; set; } 10 | 11 | public string PostData { get; set; } 12 | 13 | public bool EndVisit { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Models/SelectionOption.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Client.Models 2 | { 3 | public class SelectionOption 4 | { 5 | public string Id { get; set; } 6 | public string Label { get; set; } 7 | public double DefaultWeight { get; set; } 8 | 9 | public SelectionOption() 10 | { 11 | this.DefaultWeight = 50; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/RequestHeaderInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Sitecore.CES.GeoIp.Core.Model; 3 | 4 | namespace ExperienceGenerator.Exm.Models 5 | { 6 | public class RequestHeaderInfo 7 | { 8 | public string UserAgent { get; set; } 9 | public DateTime? RequestTime { get; set; } 10 | public WhoIsInformation GeoData { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Infrastructure/SitecoreRouteInitializer.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Http; 2 | using Sitecore.Pipelines; 3 | 4 | namespace ExperienceGenerator.Exm.Infrastructure 5 | { 6 | public class SitecoreRouteInitializer 7 | { 8 | public void Process(PipelineArgs args) 9 | { 10 | GlobalConfiguration.Configure(WebApiConfig.Register); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator/Models/SiteInfo.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Models 2 | { 3 | public class SiteInfo 4 | { 5 | public string Id { get; set; } 6 | 7 | public string Host { get; set; } 8 | 9 | public string StartPath { get; set; } 10 | 11 | public string Label { get; set; } 12 | 13 | public string Database { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/SelectionOption.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Exm.Models 2 | { 3 | public class SelectionOption 4 | { 5 | public string Id { get; set; } 6 | public string Label { get; set; } 7 | public double DefaultWeight { get; set; } 8 | 9 | public SelectionOption() 10 | { 11 | DefaultWeight = 50; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Infrastructure/SitecoreRouteInitializer.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Http; 2 | using Sitecore.Pipelines; 3 | 4 | namespace ExperienceGenerator.Client.Infrastructure 5 | { 6 | public class SitecoreRouteInitializer 7 | { 8 | 9 | public void Process(PipelineArgs args) 10 | { 11 | GlobalConfiguration.Configure(WebApiConfig.Register); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Colossus.Integration/Models/PageDefinition.cs: -------------------------------------------------------------------------------- 1 | namespace Colossus.Integration.Models 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class PageDefinition 6 | { 7 | public PageDefinition() 8 | { 9 | this.RequestVariables = new Dictionary(); 10 | } 11 | public string Path { get; set; } 12 | public Dictionary RequestVariables { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Colossus/IRequestContext.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Colossus.Web; 3 | 4 | namespace Colossus 5 | { 6 | public interface IRequestContext 7 | where TResponseInfo : ResponseInfo 8 | { 9 | Visitor Visitor { get; } 10 | 11 | void Pause(TimeSpan duration); 12 | 13 | IVisitRequestContext NewVisit(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/App_Config/Include/Z.ExperienceGenerator/zExperienceGenerator.Exm.DevSettings.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Mapping/test.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Templates.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Exm 2 | { 3 | using Sitecore.Data; 4 | public static class Templates 5 | { 6 | public struct Preset 7 | { 8 | public static ID ID = new ID("{BA1D3932-28BA-4CC3-9527-38AFC8B529C4}"); 9 | 10 | public struct Fields 11 | { 12 | public static readonly ID Specification = new ID("{387FB35F-D93F-47ED-A7B3-48B070B28297}"); 13 | } 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Colossus/Web/RequestEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Web 8 | { 9 | public class RequestEventArgs : EventArgs 10 | { 11 | public Request Request { get; private set; } 12 | 13 | public RequestEventArgs(Request request) 14 | { 15 | Request = request; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Data/Continent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using ExperienceGenerator.Repositories; 5 | using Sitecore.Analytics.Model; 6 | 7 | namespace ExperienceGenerator.Data 8 | { 9 | public class Continent 10 | { 11 | public string Code { get; set; } 12 | public string Name { get; set; } 13 | public IEnumerable SubContinents { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Colossus/Web/VisitEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.CodeDom; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace Colossus.Web 9 | { 10 | public class VisitEventArgs : EventArgs 11 | { 12 | public Visit Visit { get; private set; } 13 | 14 | public VisitEventArgs(Visit visit) 15 | { 16 | Visit = visit; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/DateRangeNotInitializedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Statistics 8 | { 9 | public class DateRangeNotInitializedException : ApplicationException 10 | { 11 | public DateRangeNotInitializedException() : base("Date range not initialized") 12 | { 13 | 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Colossus/Web/VisitInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Web 8 | { 9 | public class VisitInfo : SimulationObjectInfo 10 | { 11 | public static VisitInfo FromVisit(Visit visit) 12 | { 13 | var info = new VisitInfo(); 14 | info.SetValuesFromObject(visit); 15 | return info; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/RequestAction.cs: -------------------------------------------------------------------------------- 1 | using Colossus.Web; 2 | using Sitecore.Analytics; 3 | 4 | namespace Colossus.Integration.Processing 5 | { 6 | /// 7 | /// Classes implementing this interface are executed just before the page is rendered 8 | /// This is the right place to trigger events, outcomes etc. 9 | /// 10 | public interface IRequestAction 11 | { 12 | void Execute(ITracker tracker, RequestInfo requestInfo); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Models/JsonItemInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Newtonsoft.Json; 3 | 4 | namespace ExperienceGenerator.Models 5 | { 6 | public class JsonItemInfo 7 | { 8 | 9 | [JsonProperty("itemId")] 10 | public Guid Id { get; set; } 11 | 12 | [JsonProperty("$displayName", Required = Required.Default)] 13 | public string DisplayName { get; set; } 14 | [JsonProperty("path", Required = Required.Default)] 15 | 16 | public string Path { get; set; } 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/sitecore/EndSession.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Web; 3 | using Sitecore.Analytics; 4 | 5 | namespace ExperienceGenerator.Exm.sitecore 6 | { 7 | public partial class EndSession : System.Web.UI.Page 8 | { 9 | protected void Page_Load(object sender, EventArgs e) 10 | { 11 | if (Tracker.Current != null) 12 | Tracker.Current.EndVisit(true); 13 | HttpContext.Current.Session.Abandon(); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "340e8e4c-74fc-4ca8-8aad-795300882384" 3 | Parent: "9cbe9270-1377-48cc-87b6-263f4c705c7d" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T084148Z 15 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Http; 6 | using System.Web.Routing; 7 | using ExperienceGenerator.Client; 8 | 9 | namespace ExperienceGenerator 10 | { 11 | public class WebApiApplication : System.Web.HttpApplication 12 | { 13 | protected void Application_Start() 14 | { 15 | GlobalConfiguration.Configure(WebApiConfig.Register); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/TriggerEventData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Colossus.Integration.Processing 5 | { 6 | public class TriggerEventData 7 | { 8 | public Guid? Id { get; set; } 9 | public string Name { get; set; } 10 | public string Text { get; set; } 11 | public int? Value { get; set; } 12 | public bool IsGoal { get; set; } 13 | 14 | public Dictionary CustomValues { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docker/scripts/Add-InternalNugetFeed.ps1: -------------------------------------------------------------------------------- 1 | 2 | if (-not ([string]::IsNullOrEmpty($env:INTERNAL_NUGET_SOURCE) -or [string]::IsNullOrEmpty($env:INTERNAL_NUGET_SOURCE_USERNAME) -or [string]::IsNullOrEmpty($env:INTERNAL_NUGET_SOURCE_PASSWORD))) { 3 | Write-Host "Adding internal nuget source" 4 | dotnet nuget add source "$($env:INTERNAL_NUGET_SOURCE)" --name "sc-internal-package-feed" --username "$($env:INTERNAL_NUGET_SOURCE_USERNAME)" --password "$($env:INTERNAL_NUGET_SOURCE_PASSWORD)" --configfile "nuget.config" --store-password-in-clear-text 5 | } -------------------------------------------------------------------------------- /src/Colossus.Integration/Models/RenderingInfo.cs: -------------------------------------------------------------------------------- 1 | namespace Colossus.Integration.Models 2 | { 3 | public class RenderingInfo 4 | { 5 | 6 | public ItemInfo Item { get; set; } 7 | 8 | public string Conditions { get; set; } 9 | public string DataSource { get; set; } 10 | public string MultiVariateTest { get; set; } 11 | public string Parameters { get; set; } 12 | public string PersonalizationTest { get; set; } 13 | public string Placeholder { get; set; } 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "f67c6d31-3d39-4cc3-9153-4809b31c099c" 3 | Parent: "9cbe9270-1377-48cc-87b6-263f4c705c7d" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160725T132958Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Common.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "94eee1ce-f99f-42a9-8cc3-43e7043286e5" 3 | Parent: "340e8e4c-74fc-4ca8-8aad-795300882384" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Common 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160218T161030Z 15 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/Funnel.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Exm.Models 2 | { 3 | public class Funnel 4 | { 5 | public int OpenRate { get; set; } 6 | public int ClickRate { get; set; } 7 | public int Bounced { get; set; } 8 | public int Unsubscribed { get; set; } 9 | public int Delivered { get; set; } 10 | public int SpamComplaints { get; set; } 11 | //TODO - Warning: UnsubscribeFromAll not supported in UI 12 | public int UnsubscribedFromAll => 50; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/Common.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "5d3d25bf-5f54-428c-b52e-a78a95dedf92" 3 | Parent: "f67c6d31-3d39-4cc3-9153-4809b31c099c" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/Common 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160815T180542Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Common/Presets.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b4ef340e-be30-4959-a586-11ddf7c6f66c" 3 | Parent: "94eee1ce-f99f-42a9-8cc3-43e7043286e5" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Common/Presets 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160218T161948Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Common/Contacts.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ed72a22e-57b8-4da2-9b00-af77d25840e3" 3 | Parent: "94eee1ce-f99f-42a9-8cc3-43e7043286e5" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Common/Contacts 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160218T161948Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Common/Templates.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "30bac1eb-8d67-4837-8393-12b29b2ff2cd" 3 | Parent: "94eee1ce-f99f-42a9-8cc3-43e7043286e5" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Common/Templates 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160218T161040Z 15 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/TriggerOutcomeData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Integration.Processing 8 | { 9 | public class TriggerOutcomeData 10 | { 11 | public Guid DefinitionId { get; set; } 12 | 13 | public decimal MonetaryValue { get; set; } 14 | 15 | public DateTime? DateTime { get; set; } 16 | 17 | public Dictionary CustomValues { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/Common/Presets.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "3a9f920b-2350-4088-b9a7-2dedfef1cbc9" 3 | Parent: "5d3d25bf-5f54-428c-b52e-a78a95dedf92" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/Common/Presets 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160815T180607Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/Common/Templates.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "3fb06c33-1f02-4282-9036-6d0aca42342f" 3 | Parent: "5d3d25bf-5f54-428c-b52e-a78a95dedf92" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/Common/Templates 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160815T185725Z 15 | -------------------------------------------------------------------------------- /nuget.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/PoissonGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using MathNet.Numerics.Distributions; 7 | 8 | namespace Colossus.Statistics 9 | { 10 | public class PoissonGenerator : MathNetGenerator 11 | { 12 | public PoissonGenerator(double lambda, double scale = 1, double offset = 0) : base(new Poisson(lambda, Randomness.Random)) 13 | { 14 | Scale = scale; 15 | Offset = offset; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/ISessionPatcher.cs: -------------------------------------------------------------------------------- 1 | using Colossus.Web; 2 | using Sitecore.Analytics.Tracking; 3 | 4 | namespace Colossus.Integration.Processing 5 | { 6 | /// 7 | /// Classes implementing this interface are run while the tracker is initialized, and before rules based on the session are executed 8 | /// This is the right place to set geo data, device type, referrer etc. 9 | /// 10 | public interface ISessionPatcher 11 | { 12 | void UpdateSession(Session session, RequestInfo requestInfo); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/sitecore/EndSession.aspx.designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace ExperienceGenerator.Exm.sitecore { 11 | 12 | 13 | public partial class EndSession { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "2f9f25ef-9993-43c2-b28f-a056a31da6cc" 3 | Parent: "9d7fab6c-778a-460e-b6ee-508222174804" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160311T093314Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Sliders.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "907285a5-619e-46b9-b7af-9a6f7bae76e1" 3 | Parent: "9d7fab6c-778a-460e-b6ee-508222174804" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Sliders 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T111032Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Sliders.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "a77343c6-4986-4a87-a7b6-beb7f6219f6d" 3 | Parent: "eb911a25-00ff-465e-9794-c6046fb24a8f" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Sliders 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T111032Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/DatePickers.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "feff9e48-022b-4d74-8a30-335facd63d98" 3 | Parent: "9d7fab6c-778a-460e-b6ee-508222174804" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/DatePickers 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T113940Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/DatePickers.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "e51c7489-9066-49f5-9146-d7fb5f814f74" 3 | Parent: "eb911a25-00ff-465e-9794-c6046fb24a8f" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/DatePickers 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T113940Z 15 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/LambdaGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Statistics 8 | { 9 | public class LambdaGenerator : IRandomGenerator 10 | { 11 | private readonly Func _generator; 12 | 13 | public LambdaGenerator(Func generator) 14 | { 15 | _generator = generator; 16 | } 17 | 18 | public double Next() 19 | { 20 | return _generator(); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/DialogWindows.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "98631609-7c98-49d8-8751-b779a8fd3a84" 3 | Parent: "9d7fab6c-778a-460e-b6ee-508222174804" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/DialogWindows 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150507T133944Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/SearchEngines.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "6f01950a-c49a-416e-8ed3-ee4cacc121b8" 3 | Parent: "9d7fab6c-778a-460e-b6ee-508222174804" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/SearchEngines 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160316T100702Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "029018a9-f831-40a8-909f-720839afc078" 3 | Parent: "5fdba48b-53b2-4e3d-80e6-7d36fa98fdd5" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T105935Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/DialogWindows.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "a2c3f81e-d3c2-45c0-aba2-66cd7e69a50f" 3 | Parent: "eb911a25-00ff-465e-9794-c6046fb24a8f" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/DialogWindows 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150507T133944Z 15 | -------------------------------------------------------------------------------- /src/Colossus/Randomness.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | 8 | namespace Colossus 9 | { 10 | public class Randomness 11 | { 12 | private static ThreadLocal _random = new ThreadLocal(() => new Random()); 13 | 14 | public static Random Random { get { return _random.Value; } } 15 | 16 | public static void Seed(int seed) 17 | { 18 | _random.Value = new Random(seed); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b389f826-532d-426e-97f5-416a43d12b22" 3 | Parent: "ae110b84-5964-4494-a84e-dd773d22307a" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T105935Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/DatePickers.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ef512a36-365d-4c3a-8d23-80a7d09bfb92" 3 | Parent: "86e9eb14-9f9c-4edc-9cef-d6b590f1da8c" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/DatePickers 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T113940Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/GoalListSettings.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b7def03c-dbe4-408b-bcd0-0404d3121af1" 3 | Parent: "2f9f25ef-9993-43c2-b28f-a056a31da6cc" 4 | Template: "88b6af7b-7253-471d-a644-12b81ef8f578" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/GoalListSettings 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160311T093340Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Overview.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "63f091f4-1812-4987-adfe-5a3a917b1722" 3 | Parent: "08ad1b64-5c46-46a8-a643-c26397c5b8cc" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Overview 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T105935Z 15 | -------------------------------------------------------------------------------- /src/Colossus/Web/VisitorInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Web 8 | { 9 | public class VisitorInfo : SimulationObjectInfo 10 | { 11 | public string SegmentName { get; set; } 12 | 13 | public static VisitorInfo FromVisitor(Visitor v) 14 | { 15 | var info = new VisitorInfo {SegmentName = v.Segment != null ? v.Segment.Name : null}; 16 | info.SetValuesFromObject(v); 17 | return info; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ad71adab-4f1d-4354-9bae-b89d97749200" 3 | Parent: "2f9f25ef-9993-43c2-b28f-a056a31da6cc" 4 | Template: "88b6af7b-7253-471d-a644-12b81ef8f578" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160311T093340Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/OutcomeListSettings.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "153c2c22-1d9a-4527-8a7f-e5012f3c253c" 3 | Parent: "2f9f25ef-9993-43c2-b28f-a056a31da6cc" 4 | Template: "88b6af7b-7253-471d-a644-12b81ef8f578" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/OutcomeListSettings 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160311T093340Z 15 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/InteractionListSettings.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "11c0a46e-4ea0-4f51-b74f-c54aa9ffc79a" 3 | Parent: "2f9f25ef-9993-43c2-b28f-a056a31da6cc" 4 | Template: "88b6af7b-7253-471d-a644-12b81ef8f578" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/InteractionListSettings 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160311T093340Z 15 | -------------------------------------------------------------------------------- /src/Colossus.Integration/ColossusHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.SessionState; 3 | 4 | namespace Colossus.Integration 5 | { 6 | public class ColossusHandler : IHttpHandler, IRequiresSessionState 7 | { 8 | public void ProcessRequest(HttpContext context) 9 | { 10 | var info = context.ColossusInfo(); 11 | if (info != null && info.EndVisit) 12 | { 13 | context.Session.Abandon(); 14 | } 15 | } 16 | 17 | public bool IsReusable 18 | { 19 | get { return false; } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Data/Region.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Data 2 | { 3 | public class Region 4 | { 5 | public static Region FromCsv(string[] values) 6 | { 7 | var index = 0; 8 | return new Region 9 | { 10 | CountryCode = values[index++], 11 | RegionCode = values[index++], 12 | Name = values[index], 13 | }; 14 | } 15 | 16 | public string Name { get; set; } 17 | 18 | public string RegionCode { get; set; } 19 | 20 | public string CountryCode { get; set; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/dac931a8-8851-4ddd-b96b-94d06b8714db/PageSettings/Tabs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "646e81f2-9c84-4d06-a409-7aa314d702ba" 3 | Parent: "d6cc328d-c7b2-4c87-a33d-ef0083fe3b32" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Dialogs/EmailCampaignEditor/PageSettings/Tabs 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160726T114312Z 15 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Templates.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace ExperienceGenerator.Client 7 | { 8 | using Sitecore.Data; 9 | using Sitecore.Shell.Framework.Commands.System; 10 | 11 | public static class Templates 12 | { 13 | public struct Preset 14 | { 15 | public static ID ID = new ID("{C7089EBD-7AF0-4F14-BEEA-680A465231B1}"); 16 | 17 | public struct Fields 18 | { 19 | public static readonly ID Specification = new ID("{A0EE2080-2CC8-4DE0-8EFD-8E29CD39194F}"); 20 | } 21 | } 22 | 23 | 24 | } 25 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/CampaignSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace ExperienceGenerator.Exm.Models 5 | { 6 | public class CampaignSettings 7 | { 8 | public IEnumerable DayDistribution { get; set; } 9 | public Dictionary Devices { get; set; } 10 | public DateTime StartDate { get; set; } 11 | public DateTime EndDate { get; set; } 12 | public Funnel Events { get; set; } 13 | public Dictionary LandingPages { get; set; } 14 | public Dictionary Locations { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Colossus/IVisitRequestContext.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Net; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using Colossus.Web; 8 | 9 | namespace Colossus 10 | { 11 | public interface IVisitRequestContext : IDisposable 12 | where TResponseInfo : ResponseInfo 13 | { 14 | event EventHandler VisitEnded; 15 | 16 | Visit Visit { get; } 17 | 18 | void Pause(TimeSpan duration); 19 | 20 | TResponseInfo Request(string url, TimeSpan? duration = null, object variables = null); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/TransformedRandom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Colossus.Statistics 4 | { 5 | public class TransformedRandom : IRandomGenerator 6 | { 7 | public IRandomGenerator Generator { get; set; } 8 | public Func Transformation { get; set; } 9 | 10 | public TransformedRandom(IRandomGenerator generator, Func transformation) 11 | { 12 | Generator = generator; 13 | Transformation = transformation; 14 | } 15 | 16 | public double Next() 17 | { 18 | return Transformation(Generator.Next()); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/Colossus/Web/SimulationObjectInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Colossus.Web 5 | { 6 | public abstract class SimulationObjectInfo 7 | { 8 | public IDictionary Variables { get; set; } 9 | 10 | public DateTime Start { get; set; } 11 | public DateTime End { get; set; } 12 | 13 | public void SetValuesFromObject(SimulationObject simObject) 14 | { 15 | Start = simObject.Start; 16 | End = simObject.End; 17 | Variables = simObject.Variables.GetSerializableVariables(); 18 | } 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Colossus/SimulationObject.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus 8 | { 9 | public abstract class SimulationObject 10 | { 11 | public Dictionary Variables { get; private set; } 12 | 13 | public DateTime Start { get; set; } 14 | public DateTime End { get; set; } 15 | 16 | protected SimulationObject() 17 | { 18 | Start = DateTime.Now; 19 | End = DateTime.Now; 20 | 21 | Variables = new Dictionary(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Models/MessageContactEvents.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Sitecore.CES.GeoIp.Core.Model; 4 | using Sitecore.Modules.EmailCampaign.Messages; 5 | 6 | namespace ExperienceGenerator.Exm.Models 7 | { 8 | public class MessageContactEvents 9 | { 10 | public MessageItem MessageItem { get; set; } 11 | public Guid ContactId { get; set; } 12 | public string UserAgent { get; set; } 13 | public WhoIsInformation GeoData { get; set; } 14 | public string LandingPageUrl { get; set; } 15 | public IEnumerable Events { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/KnownItems.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Client 2 | { 3 | using Sitecore.Data; 4 | 5 | public static class KnownItems 6 | { 7 | public static readonly ID ChannelsRoot = new ID("{F575D5E6-74DE-49B6-A866-E2256D213D83}"); 8 | public static readonly ID OnlineChannelRoot = new ID("{D07286FA-67CE-4D66-8783-0140B8B91EF1}"); 9 | public static readonly ID OutcomesRoot = new ID("{062A1E69-0BF6-4D6D-AC4F-C11D0F7DC1E1}"); 10 | public static readonly ID CampaignsRoot = new ID("{EC095310-746F-4C1B-A73F-941863564DC2}"); 11 | public static readonly ID TaxonomyRoot = new ID("{F0265697-7E06-4C39-81A6-A1CB98A41972}"); 12 | 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Infrastructure/LinqExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace ExperienceGenerator.Exm.Infrastructure 5 | { 6 | public static class LinqExtensions 7 | { 8 | public static IEnumerable DistinctBy(this IEnumerable source, Func keySelector) 9 | { 10 | var knownKeys = new HashSet(); 11 | foreach (var element in source) 12 | { 13 | if (knownKeys.Add(keySelector(element))) 14 | { 15 | yield return element; 16 | } 17 | } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/Colossus.Integration/Behaviors/SitecoreBehavior.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Colossus.Integration.Models; 3 | 4 | namespace Colossus.Integration.Behaviors 5 | { 6 | 7 | public abstract class SitecoreBehavior : IVisitorBehavior 8 | { 9 | public string SitecoreUrl { get; set; } 10 | 11 | protected SitecoreBehavior(string sitecoreUrl) 12 | { 13 | this.SitecoreUrl = sitecoreUrl; 14 | } 15 | 16 | public IEnumerable Commit(Visitor visitor) 17 | { 18 | return this.Commit(new SitecoreRequestContext(this.SitecoreUrl, visitor)); 19 | } 20 | 21 | protected abstract IEnumerable Commit(SitecoreRequestContext ctx); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/List.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "5f825ecc-ddf8-4f6d-8465-6360123488da" 3 | Parent: "86e9eb14-9f9c-4edc-9cef-d6b590f1da8c" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/List 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 400 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160726T084149Z 19 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/BetaGenerator.cs: -------------------------------------------------------------------------------- 1 | using MathNet.Numerics.Distributions; 2 | 3 | namespace Colossus.Statistics 4 | { 5 | public class BetaGenerator : IRandomGenerator 6 | { 7 | public double Scale { get; set; } 8 | public double Offset { get; set; } 9 | private Beta _beta; 10 | 11 | public BetaGenerator(double a, double b, double scale = 1, double offset = 0) 12 | { 13 | Scale = scale; 14 | Offset = offset; 15 | _beta = new Beta(a, b, Randomness.Random); 16 | } 17 | 18 | public double Next() 19 | { 20 | return _beta.Sample()*Scale + Offset; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/Dialogs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "5ed8b01f-2544-4d85-a22b-402db57929f6" 3 | Parent: "86e9eb14-9f9c-4edc-9cef-d6b590f1da8c" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Dialogs 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 200 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160726T091752Z 19 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/Sliders.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "40dc87de-206b-460c-bab7-7f23a23bd51b" 3 | Parent: "86e9eb14-9f9c-4edc-9cef-d6b590f1da8c" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Sliders 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 700 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160801T072844Z 19 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "2.4" 2 | 3 | services: 4 | xGenerator: 5 | image: ${REGISTRY}community/modules/custom-xgenerator-assets:${SITECORE_VERSION}-${NANOSERVER_VERSION} 6 | isolation: ${ISOLATION} 7 | build: 8 | context: . 9 | dockerfile: .\docker\Dockerfile 10 | args: 11 | BUILD_IMAGE: mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-${WINDOWSSERVERCORE_VERSION} 12 | BASE_IMAGE: mcr.microsoft.com/windows/nanoserver:${NANOSERVER_VERSION} 13 | INTERNAL_NUGET_SOURCE: ${INTERNAL_NUGET_SOURCE} 14 | INTERNAL_NUGET_SOURCE_USERNAME: ${INTERNAL_NUGET_SOURCE_USERNAME} 15 | INTERNAL_NUGET_SOURCE_PASSWORD: ${INTERNAL_NUGET_SOURCE_PASSWORD} 16 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Data/Device.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Data 2 | { 3 | public class Device 4 | { 5 | public string Type { get; set; } 6 | public string UserAgent { get; set; } 7 | public string Name { get; set; } 8 | public string Id { get; set; } 9 | 10 | public static Device FromCsv(string csv) 11 | { 12 | var parts = csv.Split('\t'); 13 | if (parts.Length < 3) 14 | return null; 15 | 16 | return new Device() 17 | { 18 | Type = parts[0], 19 | Name = parts[1], 20 | UserAgent = parts[2], 21 | Id = parts[1].ToLowerInvariant().Replace("(","").Replace(")","").Replace(",","") 22 | }; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Common/Templates/Settings Preset.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "c7089ebd-7af0-4f14-beea-680a465231b1" 3 | Parent: "30bac1eb-8d67-4837-8393-12b29b2ff2cd" 4 | Template: "ab86861a-6030-46c5-b394-e8f99e8b87db" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Common/Templates/Settings Preset 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160218T162041Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/DialogWindows.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "a3237473-d072-4b5f-912c-94dfa8eada65" 3 | Parent: "86e9eb14-9f9c-4edc-9cef-d6b590f1da8c" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/DialogWindows 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 300 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160812T191104Z 19 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/Common/Templates/Settings Preset.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ba1d3932-28ba-4cc3-9527-38afc8b529c4" 3 | Parent: "3fb06c33-1f02-4282-9036-6d0aca42342f" 4 | Template: "ab86861a-6030-46c5-b394-e8f99e8b87db" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/Common/Templates/Settings Preset 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160218T162041Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/SearchEngines/Bing.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "e57ed5d3-4307-4023-b882-35a5bec0b4fd" 3 | Parent: "6f01950a-c49a-416e-8ed3-ee4cacc121b8" 4 | Template: "b174990b-37b1-4a60-9c7d-891b521e1b76" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/SearchEngines/Bing 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160316T100759Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/SearchEngines/Google.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b7cb7cc7-cb0c-4dfc-b3d7-ae06067cbfac" 3 | Parent: "6f01950a-c49a-416e-8ed3-ee4cacc121b8" 4 | Template: "b174990b-37b1-4a60-9c7d-891b521e1b76" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/SearchEngines/Google 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160316T100759Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/DatePickers/DatePicker Parameters.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "f8329eed-e027-431e-be36-1e408a26cc41" 3 | Parent: "feff9e48-022b-4d74-8a30-335facd63d98" 4 | Template: "a006af51-8c91-4229-a590-c7a853684249" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/DatePickers/DatePicker Parameters 6 | DB: core 7 | SharedFields: 8 | - ID: "c37f3302-2d96-40f0-801a-21ed80a645d3" 9 | Hint: ViewMode 10 | Value: Textbox 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20150505T114002Z 19 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/DatePickers/DatePicker Parameters.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "605849e7-5869-45a7-a1c6-2dfd8e84fa7b" 3 | Parent: "e51c7489-9066-49f5-9146-d7fb5f814f74" 4 | Template: "a006af51-8c91-4229-a590-c7a853684249" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/DatePickers/DatePicker Parameters 6 | DB: core 7 | SharedFields: 8 | - ID: "c37f3302-2d96-40f0-801a-21ed80a645d3" 9 | Hint: ViewMode 10 | Value: Textbox 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20150505T114002Z 19 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | version: 9.0.2.{build} 2 | pull_requests: 3 | do_not_increment_build_number: true 4 | image: Visual Studio 2017 5 | assembly_info: 6 | patch: true 7 | file: '**\AssemblyInfo.*' 8 | assembly_version: '{version}' 9 | assembly_file_version: '{version}' 10 | assembly_informational_version: '{version}' 11 | before_build: 12 | - ps: msbuild ExperienceGenerator.sln /t:clean /restore 13 | build: 14 | project: ExperienceGenerator.sln 15 | verbosity: normal 16 | environment: 17 | access_token: 18 | secure: 48ZRV74CeC0RAqmAVMdTpeahzqc4EifTQokp31h7bvNal8t/16DmpzzxpEMSRSai 19 | git_email: 20 | secure: UAfy/P3FPG30Q+suI1b+s1dx681urUjw59gx6wUVmvg= 21 | git_fullname: 22 | secure: vnLPnvBeWKmNKFKI671+N9KFQA5KQNhKZPwt2ycFILk= 23 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/DatePickers/DatePicker Parameters.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "15762826-bd8d-4c6b-ae1d-19dcf8daf0b9" 3 | Parent: "ef512a36-365d-4c3a-8d23-80a7d09bfb92" 4 | Template: "a006af51-8c91-4229-a590-c7a853684249" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/DatePickers/DatePicker Parameters 6 | DB: core 7 | SharedFields: 8 | - ID: "c37f3302-2d96-40f0-801a-21ed80a645d3" 9 | Hint: ViewMode 10 | Value: Textbox 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20150505T114002Z 19 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/JsonHelpers.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Newtonsoft.Json.Linq; 3 | 4 | namespace ExperienceGenerator.Parsing 5 | { 6 | public static class JsonHelpers 7 | { 8 | public static IEnumerable AsArray(this JToken val) 9 | { 10 | if (val == null || val.Type == JTokenType.Null) yield break; 11 | 12 | var array = val as JArray; 13 | if (array == null) 14 | { 15 | yield return val; 16 | 17 | } 18 | else 19 | { 20 | foreach (var item in array) 21 | { 22 | yield return item; 23 | } 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Colossus/ContactBasedSimulator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace Colossus 6 | { 7 | public class ContactBasedSimulator : IVisitSimulator 8 | { 9 | private readonly IEnumerable _visitorSegment; 10 | 11 | public ContactBasedSimulator(IEnumerable segments) 12 | { 13 | _visitorSegment = segments; 14 | } 15 | 16 | public IEnumerable GetVisitors(int count) 17 | { 18 | return _visitorSegment.Select(visitorSegment => new Visitor(visitorSegment) 19 | { 20 | Start = visitorSegment.DateGenerator?.Start ?? DateTime.Now 21 | }); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Services/IndexService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using ExperienceGenerator.Exm.Models; 6 | using Sitecore.Configuration; 7 | using Sitecore.ContentSearch; 8 | using Sitecore.Data.Managers; 9 | using Sitecore.ListManagement.Configuration; 10 | using Sitecore.Publishing; 11 | 12 | namespace ExperienceGenerator.Exm.Services 13 | { 14 | public static class IndexService 15 | { 16 | public static void RebuildListIndexes(Job job) 17 | { 18 | job.Status = "Rebuilding Contact List Index"; 19 | ContentSearchManager.GetIndex(ListManagementSettings.ContactListIndexName).Rebuild(IndexingOptions.ForcedIndexing); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/ParseConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Colossus.Statistics; 4 | using Newtonsoft.Json.Linq; 5 | 6 | namespace ExperienceGenerator.Parsing 7 | { 8 | public static class ParseConfig 9 | { 10 | public static IDictionary>> Factories { get; private set; } 11 | 12 | public static IDictionary> TrendFactories { get; private set; } 13 | 14 | static ParseConfig() 15 | { 16 | Factories = new Dictionary>>(); 17 | TrendFactories = new Dictionary>(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/ChannelPatcher.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Colossus.Web; 3 | using Sitecore.Analytics.Tracking; 4 | 5 | namespace Colossus.Integration.Processing 6 | { 7 | public class ChannelPatcher : ISessionPatcher 8 | { 9 | public void UpdateSession(Session session, RequestInfo requestInfo) 10 | { 11 | requestInfo.SetIfVariablePresent("Channel", (value) => 12 | { 13 | if (string.IsNullOrEmpty(value)) 14 | { 15 | return; 16 | } 17 | 18 | Guid id; 19 | if (Guid.TryParse(value, out id)) 20 | { 21 | session.Interaction.ChannelId = id; 22 | } 23 | }); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/Factories/VariableFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Colossus; 3 | using Newtonsoft.Json.Linq; 4 | 5 | namespace ExperienceGenerator.Parsing.Factories 6 | { 7 | public abstract class VariableFactory 8 | { 9 | public virtual void UpdateSegment(VisitorSegment segment, JToken definition, XGenParser parser) 10 | { 11 | } 12 | 13 | public virtual void SetDefaults(VisitorSegment segment, XGenParser parser) 14 | { 15 | } 16 | 17 | public static VariableFactory Lambda(Action updateSegment = null, 18 | Action setDefaults = null) 19 | { 20 | return new LambdaFactory(updateSegment, setDefaults); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/WignerGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using MathNet.Numerics.Distributions; 7 | 8 | namespace Colossus.Statistics 9 | { 10 | public class WignerGenerator : IRandomGenerator 11 | { 12 | public double R { get; set; } 13 | public double Shift { get; set; } 14 | 15 | private IRandomGenerator _beta; 16 | 17 | public WignerGenerator(double r, double shift = 0d) 18 | { 19 | R = r; 20 | Shift = shift; 21 | _beta = new BetaGenerator(1.5, 1.5); 22 | } 23 | 24 | public double Next() 25 | { 26 | return 2 * R * _beta.Next() - R + Shift; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Models/ConfigurationOptions.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Client.Models 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class ConfigurationOptions 6 | { 7 | public string Version { get; set; } 8 | public List Websites { get; set; } 9 | public List Languages { get; set; } 10 | public List LocationGroups { get; set; } 11 | public List Campaigns { get; set; } 12 | public List ChannelTypes { get; set; } 13 | public List OrganicSearch { get; set; } 14 | public List PpcSearch { get; set; } 15 | public List OutcomeGroups { get; set; } 16 | public bool TrackerIsEnabled { get; set; } 17 | } 18 | } -------------------------------------------------------------------------------- /src/Colossus/Statistics/NormalGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Colossus.Statistics 4 | { 5 | public class NormalGenerator : IRandomGenerator 6 | { 7 | 8 | public double Location { get; set; } 9 | public double Scale { get; set; } 10 | 11 | public NormalGenerator(double location, double scale) 12 | { 13 | Location = location; 14 | Scale = scale; 15 | } 16 | 17 | public double Next() 18 | { 19 | var _random = Randomness.Random; 20 | var u1 = 1*_random.NextDouble(); 21 | var u2 = 1*_random.NextDouble(); 22 | 23 | return Location + Scale * Math.Sqrt(-2 * Math.Log(Math.Max(0.0001,u1))) * Math.Cos(2 * Math.PI * u2); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Common/Templates/Settings Preset/Data.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "f8bc9a3c-fc0b-41c1-9c61-8bbd21ce3931" 3 | Parent: "c7089ebd-7af0-4f14-beea-680a465231b1" 4 | Template: "e269fbb5-3750-427a-9149-7aa950b49301" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Common/Templates/Settings Preset/Data 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 100 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160218T162146Z 19 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 20 | Hint: __Created by 21 | Value: | 22 | sitecore\admin 23 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/End date.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "f0ba74d7-b168-4f11-a554-313d6d22eeb3" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/End date 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: End date 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/End date.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "03dcb85b-c4e0-49e6-8e6a-83530c87d1f3" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/End date 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: End date 22 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/Common/Templates/Settings Preset/Data.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "05ba1057-954f-4da7-a8d5-c1896ba9ad33" 3 | Parent: "ba1d3932-28ba-4cc3-9527-38afc8b529c4" 4 | Template: "e269fbb5-3750-427a-9149-7aa950b49301" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/Common/Templates/Settings Preset/Data 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 100 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160218T162146Z 19 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 20 | Hint: __Created by 21 | Value: | 22 | sitecore\admin 23 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Start date.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "18eaf30e-65dc-41dd-b1a5-9042280d77c8" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Start date 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Start date 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Start date.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "2ee01475-d0ff-4230-8a3a-8218e1c6a8cf" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Start date 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Start date 22 | -------------------------------------------------------------------------------- /docker/scripts/Packaging/generate-update-package.ps1: -------------------------------------------------------------------------------- 1 | Param( 2 | [string]$target, 3 | [string]$output 4 | ) 5 | 6 | Write-Host "Installing Module" 7 | Install-Module -Name Sitecore.Courier -Repository PSGallery -Force -Confirm:$False -RequiredVersion 1.4.3 8 | 9 | Write-Host "Importing Module" 10 | Import-Module Sitecore.Courier -Force -Verbose 11 | 12 | Write-Host "Creating Update Packages" 13 | New-CourierPackage -Target $target -Output "$output" -SerializationProvider "Rainbow" -IncludeFiles $false -EnsureRevision $true -DacPac $true 14 | Write-Host "Created Update Package" -ForegroundColor Green 15 | 16 | if (Test-Path -Path "$output/core.sql") { 17 | Remove-Item -Verbose -Path "$output/core.sql" -Force 18 | } 19 | if (Test-Path -Path "$output/core.dacpac") { 20 | Rename-Item -Verbose -Path "$output/core.dacpac" -NewName "Sitecore.Core.dacpac" 21 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Infrastructure/XGenSitecoreJobManager.cs: -------------------------------------------------------------------------------- 1 | using Sitecore; 2 | using Sitecore.Jobs; 3 | 4 | namespace ExperienceGenerator.Client.Infrastructure 5 | { 6 | /// 7 | /// A job manager that wraps Sitecore's job manager 8 | /// 9 | public class XGenSitecoreJobManager : XGenJobManager 10 | { 11 | protected override void StartJob(JobInfo info, JobSegment segment) 12 | { 13 | var options = new DefaultJobOptions("ExperienceGenerator-" + info.Id + "/" + segment.Id, "ExperienceGenerator", Context.Site.Name, this, "Run", 14 | new object[] { segment }); 15 | 16 | JobManager.Start(options); 17 | } 18 | 19 | public void Run(JobSegment job) 20 | { 21 | Process(job); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Overview/End date.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "6545dfb9-7194-4656-85a8-d5c47805ed84" 3 | Parent: "63f091f4-1812-4987-adfe-5a3a917b1722" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Overview/End date 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: End date 22 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "f4e1fc60-f41c-4ff7-96f3-a393cacf1c56" 3 | Parent: "5f825ecc-ddf8-4f6d-8465-6360123488da" 4 | Template: "871931b2-7ece-4b24-b7d4-3474eb7eaa13" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 100 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20130408T132752 19 | - ID: "d3c94c90-88e8-4f33-8efd-286450bcf880" 20 | Hint: EmptyText 21 | Value: No messages match your search criteria 22 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Overview/Start date.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "e164263b-8e6e-4fab-8f1d-82cb481ac527" 3 | Parent: "63f091f4-1812-4987-adfe-5a3a917b1722" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Overview/Start date 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Start date 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/029018a9-f831-40a8-909f-720839afc078/Percentage identified visitors.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "252f366a-270c-4c47-9877-c097f06be47c" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Percentage identified visitors 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Percentage identified visitors 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Pageviews per visit avg.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "c447d8d4-fa43-4577-897f-f5b0e626b6e7" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Pageviews per visit avg 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Pageviews per visit (avg) 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/b389f826-532d-426e-97f5-416a43d12b22/Percentage identified visitors.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "2f0e40f9-e210-483d-800c-e388d428651c" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Percentage identified visitors 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Percentage identified visitors 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Number of unique visitors.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "0c360c11-d9b0-4b6f-abfc-4abf85ac6146" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Number of unique visitors 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Number of unique visitors 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Time spent per visit avg.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b47ba1dc-9b68-4c0c-92cb-ad0da3fb2663" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Time spent per visit avg 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Time spent per page (avg) 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Number of unique visitors.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "04281f02-818d-425e-8fad-7795ebe64f6d" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Number of unique visitors 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Number of unique visitors 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Pageviews per visit avg.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "187f31b7-fef3-4acb-b601-0454fc268486" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Pageviews per visit avg 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Pageviews per visit (avg) 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Time spent per visit avg.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "0d6001c4-4ca7-4615-b146-128763549f0f" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Time spent per visit avg 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Time spent per page (avg) 22 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/63f091f4-1812-4987-adfe-5a3a917b1722/Number of visits generated.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "7e23d53b-c163-4e28-8f06-eea05aa8695d" 3 | Parent: "63f091f4-1812-4987-adfe-5a3a917b1722" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Overview/Number of visits generated 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Number of visits generated (approx.) 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Annual increase in traffic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b03bda5e-0dad-4aca-81c0-08232a1a14bc" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Annual increase in traffic 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Annual increase in traffic 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Annual increase in traffic.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "50e2d15c-824b-4c55-90a6-94605d4b6dee" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Annual increase in traffic 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Annual increase in traffic 22 | -------------------------------------------------------------------------------- /src/Colossus/Web/RequestInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using HtmlAgilityPack; 7 | 8 | namespace Colossus.Web 9 | { 10 | public class RequestInfo : SimulationObjectInfo 11 | { 12 | public VisitorInfo Visitor { get; set; } 13 | 14 | public VisitInfo Visit { get; set; } 15 | 16 | public bool EndVisit { get; set; } 17 | 18 | public static RequestInfo FromVisit(Request request) 19 | { 20 | var info = new RequestInfo(); 21 | info.SetValuesFromObject(request); 22 | info.EndVisit = request.EndVisit; 23 | info.Visit = VisitInfo.FromVisit(request.Visit); 24 | info.Visitor = VisitorInfo.FromVisitor(request.Visit.Visitor); 25 | 26 | return info; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Number of visits generated.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "6a40326c-10bc-491d-bf5f-37dea4a5c9f5" 3 | Parent: "029018a9-f831-40a8-909f-720839afc078" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts/Overview/Number of visits generated 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Number of visits generated (approx.) 22 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Number of visits generated.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "16dda573-b59c-4b3a-8578-fb8fefe8e23e" 3 | Parent: "b389f826-532d-426e-97f5-416a43d12b22" 4 | Template: "76f63df7-0235-4164-86ab-84b5ec48cb2a" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts/Overview/Number of visits generated 6 | DB: core 7 | Languages: 8 | - Language: en 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20150505T110036Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - ID: "b3f89d3b-fc37-4699-860e-db8fb37323c1" 20 | Hint: Text 21 | Value: Number of visits generated (approx.) 22 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/JobSpecification.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using Colossus; 3 | using ExperienceGenerator.Parsing; 4 | using Newtonsoft.Json.Linq; 5 | 6 | namespace ExperienceGenerator 7 | { 8 | public class JobSpecification 9 | { 10 | public JobType Type { get; set; } 11 | public string RootUrl { get; set; } 12 | 13 | public int VisitorCount { get; set; } 14 | 15 | public JObject Specification { get; set; } 16 | 17 | public IVisitSimulator CreateSimulator() 18 | { 19 | var parser = new XGenParser(RootUrl); 20 | if (!Specification["Segments"].Any()) 21 | return new ContactBasedSimulator(parser.ParseContacts(Specification["Contacts"], Type)); 22 | 23 | var segments = parser.ParseSegments(Specification["Segments"], Type); 24 | return new SegmentBasedSimulator(segments); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/WeightedRandom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Statistics 8 | { 9 | public class WeightedRandom : IRandomGenerator 10 | { 11 | private readonly double[] _weights; 12 | private double _totalWeight; 13 | 14 | public WeightedRandom(IEnumerable weights) 15 | { 16 | _weights = weights.Select(w => _totalWeight += w).ToArray(); 17 | } 18 | 19 | public double Next() 20 | { 21 | var n = Randomness.Random.NextDouble() * _totalWeight; 22 | for (var i = 0; i < _weights.Length; i++) 23 | { 24 | if (n < _weights[i]) return i; 25 | } 26 | 27 | throw new Exception("All weights can't be 0"); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/RequestInfoHelpers.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Colossus.Web; 3 | 4 | namespace Colossus.Integration.Processing 5 | { 6 | public static class RequestInfoHelpers 7 | { 8 | public static bool SetIfVariablePresent(this RequestInfo requestInfo, string name, 9 | Action setAction) 10 | { 11 | return requestInfo.SetIfVariablePresent(name, setAction); 12 | } 13 | 14 | public static bool SetIfVariablePresent(this RequestInfo requestInfo, string name, Action setAction) 15 | { 16 | return requestInfo.Variables.SetIfPresent(name, setAction) 17 | || (requestInfo.Visit != null && requestInfo.Visit.Variables.SetIfPresent(name, setAction)) 18 | || (requestInfo.Visitor != null && requestInfo.Visitor.Variables.SetIfPresent(name, setAction)); 19 | 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Properties/PublishProfiles/local.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | FileSystem 10 | Release 11 | Any CPU 12 | 13 | True 14 | False 15 | False 16 | 17 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Properties/PublishProfiles/local.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | FileSystem 10 | Debug 11 | Any CPU 12 | 13 | True 14 | False 15 | False 16 | 17 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Properties/PublishProfiles/local.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | FileSystem 10 | Debug 11 | Any CPU 12 | 13 | True 14 | False 15 | False 16 | 17 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Common/Templates/Settings Preset/Data/Specification.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "a0ee2080-2cc8-4de0-8efd-8e29cd39194f" 3 | Parent: "f8bc9a3c-fc0b-41c1-9c61-8bbd21ce3931" 4 | Template: "455a3e98-a627-4b40-8035-e683a0331ac7" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Common/Templates/Settings Preset/Data/Specification 6 | DB: core 7 | SharedFields: 8 | - ID: "ab162cc0-dc80-4abf-8871-998ee5d7ba32" 9 | Hint: Type 10 | Value: "Single-Line Text" 11 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 12 | Hint: __Sortorder 13 | Value: 100 14 | Languages: 15 | - Language: en 16 | Versions: 17 | - Version: 1 18 | Fields: 19 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 20 | Hint: __Created 21 | Value: 20160218T162146Z 22 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 23 | Hint: __Created by 24 | Value: | 25 | sitecore\admin 26 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings/Email.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b802bc3e-fc92-4a8d-84c5-bfaff7a91e1d" 3 | Parent: "ad71adab-4f1d-4354-9bae-b89d97749200" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings/Email 6 | DB: core 7 | SharedFields: 8 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 9 | Hint: DataField 10 | Value: email 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160311T093544Z 19 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 20 | Hint: HeaderText 21 | Value: Email 22 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 23 | Hint: __Created by 24 | Value: | 25 | sitecore\admin 26 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/GoalListSettings/Goal.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ca35a7aa-6884-43f6-92e3-963fbe288670" 3 | Parent: "b7def03c-dbe4-408b-bcd0-0404d3121af1" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/GoalListSettings/Goal 6 | DB: core 7 | SharedFields: 8 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 9 | Hint: DataField 10 | Value: $displayName 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160311T093544Z 19 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 20 | Hint: HeaderText 21 | Value: Goal 22 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 23 | Hint: __Created by 24 | Value: | 25 | sitecore\admin 26 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/Common/Templates/Settings Preset/Data/Specification.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "387fb35f-d93f-47ed-a7b3-48b070b28297" 3 | Parent: "05ba1057-954f-4da7-a8d5-c1896ba9ad33" 4 | Template: "455a3e98-a627-4b40-8035-e683a0331ac7" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/Common/Templates/Settings Preset/Data/Specification 6 | DB: core 7 | SharedFields: 8 | - ID: "ab162cc0-dc80-4abf-8871-998ee5d7ba32" 9 | Hint: Type 10 | Value: "Single-Line Text" 11 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 12 | Hint: __Sortorder 13 | Value: 100 14 | Languages: 15 | - Language: en 16 | Versions: 17 | - Version: 1 18 | Fields: 19 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 20 | Hint: __Created 21 | Value: 20160218T162146Z 22 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 23 | Hint: __Created by 24 | Value: | 25 | sitecore\admin 26 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/GeoPatcher.cs: -------------------------------------------------------------------------------- 1 | using Colossus.Web; 2 | using Sitecore.CES.GeoIp.Core.Model; 3 | using Sitecore.Analytics.Tracking; 4 | 5 | namespace Colossus.Integration.Processing 6 | { 7 | public class GeoPatcher : ISessionPatcher 8 | { 9 | public void UpdateSession(Session session, RequestInfo requestInfo) 10 | { 11 | 12 | if (requestInfo.Visitor != null) 13 | { 14 | var whois = new WhoIsInformation(); 15 | if (requestInfo.Visitor.Variables.SetIfPresent("Country", v => whois.Country = v) 16 | | requestInfo.Visitor.Variables.SetIfPresent("Region", v => whois.Region = v) 17 | | requestInfo.Visitor.Variables.SetIfPresent("City", v => whois.City = v)) 18 | { 19 | session.Interaction.SetWhoIsInformation(whois); 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings/FirstName.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "9f0ccafe-f80e-40ed-966b-cda510bac2f2" 3 | Parent: "ad71adab-4f1d-4354-9bae-b89d97749200" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings/FirstName 6 | DB: core 7 | SharedFields: 8 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 9 | Hint: DataField 10 | Value: firstName 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160311T093544Z 19 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 20 | Hint: HeaderText 21 | Value: First Name 22 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 23 | Hint: __Created by 24 | Value: | 25 | sitecore\admin 26 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings/LastName.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ac755110-5351-4e8b-82ed-cb6ee837d847" 3 | Parent: "ad71adab-4f1d-4354-9bae-b89d97749200" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/ContactListSettings/LastName 6 | DB: core 7 | SharedFields: 8 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 9 | Hint: DataField 10 | Value: lastName 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160311T093544Z 19 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 20 | Hint: HeaderText 21 | Value: Last Name 22 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 23 | Hint: __Created by 24 | Value: | 25 | sitecore\admin 26 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Lists/OutcomeListSettings/Outcome.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "7a17f59b-74b5-4d6d-a274-06c4f3520fae" 3 | Parent: "153c2c22-1d9a-4527-8a7f-e5012f3c253c" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Lists/OutcomeListSettings/Outcome 6 | DB: core 7 | SharedFields: 8 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 9 | Hint: DataField 10 | Value: $displayName 11 | Languages: 12 | - Language: en 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: 20160311T093544Z 19 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 20 | Hint: HeaderText 21 | Value: Outcome 22 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 23 | Hint: __Created by 24 | Value: | 25 | sitecore\admin 26 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Models/Interaction.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using ExperienceGenerator.Data; 3 | using Newtonsoft.Json; 4 | 5 | namespace ExperienceGenerator.Models 6 | { 7 | 8 | public class Interaction 9 | 10 | { 11 | [JsonProperty("geoData")] 12 | public City GeoData { get; set; } 13 | 14 | [JsonProperty("channelId")] 15 | public string ChannelId { get; set; } 16 | [JsonProperty("pages")] 17 | 18 | public IEnumerable Pages { get; set; } 19 | 20 | [JsonProperty("campaignId")] 21 | public string CampaignId { get; set; } 22 | 23 | [JsonProperty("outcomes")] 24 | public IEnumerable Outcomes { get; set; } 25 | 26 | [JsonProperty("recency")] 27 | public string Recency { get; set; } 28 | 29 | [JsonProperty("searchEngine")] 30 | public string SearchEngine { get; set; } 31 | [JsonProperty("searchKeyword")] 32 | 33 | public string SearchKeyword { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Data/FileHelpers.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.IO.Compression; 5 | 6 | namespace ExperienceGenerator.Data 7 | { 8 | public static class FileHelpers 9 | { 10 | 11 | public static IEnumerable ReadLinesFromResource(string path, bool zipped = false) 12 | { 13 | var stream = typeof(TAssembly).Assembly.GetManifestResourceStream(path); 14 | if (stream == null) 15 | throw new ArgumentNullException(nameof(stream)); 16 | 17 | if (zipped) 18 | { 19 | stream = new GZipStream(stream, CompressionMode.Decompress); 20 | } 21 | 22 | using (var reader = new StreamReader(stream)) 23 | { 24 | while (!reader.EndOfStream) 25 | { 26 | yield return reader.ReadLine(); 27 | } 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Button/Exm Experience Generator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "30579168-5c30-49ec-8679-21c56ce53f49" 3 | Parent: "e8ed70ba-1401-4bcf-b3f9-5a60fe67c8f5" 4 | Template: "d4c7f5f9-8977-4e0c-b6ce-28ae8e0753e2" 5 | Path: /sitecore/client/Applications/Launchpad/PageSettings/Buttons/Tools/Exm Experience Generator 6 | DB: core 7 | SharedFields: 8 | - ID: "044e3fdb-22ae-4e6c-b50e-2abdfbabd338" 9 | Hint: Link 10 | Value: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator 11 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 12 | Hint: __Sortorder 13 | Value: 200 14 | - ID: "d25b56d4-23b6-4462-be25-b6a6d7f38e13" 15 | Hint: Icon 16 | Value: Office/32x32/mail_bug.png 17 | Languages: 18 | - Language: en 19 | Versions: 20 | - Version: 1 21 | Fields: 22 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 23 | Hint: __Created 24 | Value: 20150515T094449Z 25 | - ID: "aa4a4643-5bfc-45a7-b9d9-5183a5211d99" 26 | Hint: Text 27 | Value: Exm Experience Generator 28 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/SkewNormalGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Colossus.Statistics 4 | { 5 | public class SkewNormalGenerator : IRandomGenerator 6 | { 7 | private NormalGenerator _normalGenerator; 8 | public double Location { get; set; } 9 | public double Scale { get; set; } 10 | public double Shape { get; set; } 11 | 12 | public SkewNormalGenerator(double location, double scale, double shape) 13 | { 14 | _normalGenerator = new NormalGenerator(0, 1); 15 | Location = location; 16 | Scale = scale; 17 | Shape = shape; 18 | } 19 | 20 | public double Next() 21 | { 22 | var r = Shape / Math.Sqrt(1 + Shape * Shape); 23 | var u0 = _normalGenerator.Next(); 24 | var v = _normalGenerator.Next(); 25 | var u1 = r * u0 + Math.Sqrt(1 - r * r) * v; 26 | return (u0 >= 0 ? u1 : -u1) * Scale + Location; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application.Link/Experience Generator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "b193d8b5-f112-499a-aa46-cc4e1f1bb992" 3 | Parent: "e8ed70ba-1401-4bcf-b3f9-5a60fe67c8f5" 4 | Template: "d4c7f5f9-8977-4e0c-b6ce-28ae8e0753e2" 5 | Path: /sitecore/client/Applications/Launchpad/PageSettings/Buttons/Tools/Experience Generator 6 | DB: core 7 | SharedFields: 8 | - ID: "044e3fdb-22ae-4e6c-b50e-2abdfbabd338" 9 | Hint: Link 10 | Value: /sitecore/client/Applications/ExperienceGenerator/DataSheet 11 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 12 | Hint: __Sortorder 13 | Value: 200 14 | - ID: "d25b56d4-23b6-4462-be25-b6a6d7f38e13" 15 | Hint: Icon 16 | Value: ExperienceGenerator/48x48/Experience Generator.png 17 | Languages: 18 | - Language: en 19 | Versions: 20 | - Version: 1 21 | Fields: 22 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 23 | Hint: __Created 24 | Value: 20150515T094449Z 25 | - ID: "aa4a4643-5bfc-45a7-b9d9-5183a5211d99" 26 | Hint: Text 27 | Value: Experience Generator 28 | -------------------------------------------------------------------------------- /scripts/Unicorn/Sync.ps1: -------------------------------------------------------------------------------- 1 | param([string]$url, [string]$secret) 2 | $ErrorActionPreference = 'Stop' 3 | 4 | $ScriptPath = Split-Path $MyInvocation.MyCommand.Path 5 | 6 | # This is an example PowerShell script that will remotely execute a Unicorn sync using the new CHAP authentication system. 7 | 8 | Import-Module $ScriptPath\Unicorn.psm1 9 | 10 | # SYNC ALL CONFIGURATIONS 11 | #Sync-Unicorn -ControlPanelUrl $url -SharedSecret $secret 12 | 13 | # SYNC SPECIFIC CONFIGURATIONS 14 | Sync-Unicorn -ControlPanelUrl $url -SharedSecret $secret -Configurations @('ExperienceGenerator', 'ExmExperienceGenerator') 15 | 16 | # SYNC ALL CONFIGURATIONS, SKIPPING ANY WITH TRANSPARENT SYNC ON 17 | # Sync-Unicorn -ControlPanelUrl 'https://localhost/unicorn.aspx' -SharedSecret 'your-sharedsecret-here' -SkipTransparentConfigs 18 | 19 | # Note: you may pass -Verb 'Reserialize' for remote reserialize. Usually not needed though. 20 | # Note: If you are having authorization issues, add -DebugSecurity to your cmdlet invocation; this will display the raw signatures being used to compare to the server. 21 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Open rate.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "41eb7827-3eb2-47cb-82ca-d412d5adb43b" 3 | Parent: "f4e1fc60-f41c-4ff7-96f3-a393cacf1c56" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Open rate 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 600 11 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 12 | Hint: DataField 13 | Value: openRate 14 | Languages: 15 | - Language: en 16 | Versions: 17 | - Version: 1 18 | Fields: 19 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 20 | Hint: __Created 21 | Value: 20130408T115111 22 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 23 | Hint: HeaderText 24 | Value: Open rate 25 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 26 | Hint: __Created by 27 | Value: | 28 | sitecore\admin 29 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application.Contacts.Link/Contact Experience Generator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "e45c19e0-f3fa-45d6-90d5-c295803a7ce3" 3 | Parent: "e8ed70ba-1401-4bcf-b3f9-5a60fe67c8f5" 4 | Template: "d4c7f5f9-8977-4e0c-b6ce-28ae8e0753e2" 5 | Path: /sitecore/client/Applications/Launchpad/PageSettings/Buttons/Tools/Contact Experience Generator 6 | DB: core 7 | SharedFields: 8 | - ID: "044e3fdb-22ae-4e6c-b50e-2abdfbabd338" 9 | Hint: Link 10 | Value: /sitecore/client/Applications/ExperienceGenerator/Contacts 11 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 12 | Hint: __Sortorder 13 | Value: 200 14 | - ID: "d25b56d4-23b6-4462-be25-b6a6d7f38e13" 15 | Hint: Icon 16 | Value: ExperienceGenerator/48x48/Experience Generator.png 17 | Languages: 18 | - Language: en 19 | Versions: 20 | - Version: 1 21 | Fields: 22 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 23 | Hint: __Created 24 | Value: 20150515T094449Z 25 | - ID: "aa4a4643-5bfc-45a7-b9d9-5183a5211d99" 26 | Hint: Text 27 | Value: Profile Experience Generator 28 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Recipients.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "e1aa826e-324a-49a2-82d3-ded3a187f695" 3 | Parent: "f4e1fc60-f41c-4ff7-96f3-a393cacf1c56" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Recipients 6 | DB: core 7 | SharedFields: 8 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 9 | Hint: __Sortorder 10 | Value: 400 11 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 12 | Hint: DataField 13 | Value: totalRecipients 14 | Languages: 15 | - Language: en 16 | Versions: 17 | - Version: 1 18 | Fields: 19 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 20 | Hint: __Created 21 | Value: 20140312T141614 22 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 23 | Hint: HeaderText 24 | Value: Recipients 25 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 26 | Hint: __Created by 27 | Value: | 28 | sitecore\admin 29 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Repositories/ContactSettingsRepository.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Linq; 2 | using Sitecore.Data; 3 | using Sitecore.Data.Items; 4 | using Sitecore.SecurityModel; 5 | 6 | namespace ExperienceGenerator.Client.Repositories 7 | { 8 | public class ContactSettingsRepository : SettingsRepository 9 | { 10 | public ContactSettingsRepository() 11 | { 12 | } 13 | 14 | public ContactSettingsRepository(Database database) : base(database) 15 | { 16 | } 17 | 18 | private const string contactPresetsRootPath = "/sitecore/client/Applications/ExperienceGenerator/Common/Contacts"; 19 | protected override Item PresetsRoot => Database.GetItem(contactPresetsRootPath); 20 | 21 | public JArray GetContactSettingPreset(ID id) 22 | { 23 | using (new SecurityDisabler()) 24 | { 25 | var preset = PresetsRoot.Axes.SelectSingleItem($"//*[@@id='{id}']"); 26 | return preset == null ? null : CreateArray(preset); 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Api doc.txt: -------------------------------------------------------------------------------- 1 | Selection options for the frontend (Websites, locations, campaigns etc) 2 | GET: 3 | /api/xgen/options 4 | 5 | To start a job: 6 | POST: 7 | /api/xgen/jobs 8 | 9 | If that worked, the server will redirect to: 10 | GET: 11 | /api/xgen/jobs/(job id) 12 | 13 | Poll (i.e. keep requesting) this URL to get updated status information 14 | 15 | For the user, the interesting parts of this response are: 16 | Started (Start date time) 17 | JobStatus (Options: Pending, Running, Cancelling, Cancelled, Failed, Complete) 18 | Progress (number between 0.0 and 1.0) 19 | CompletedVisitors (Number of completed visitors/contacts) 20 | CompletedVisits (Number of completed visits) 21 | TargetVisitors (The requested number of visitors to simulate) 22 | 23 | 24 | To cancel a job send 25 | DELETE: 26 | /api/xgen/jobs/(job id) 27 | 28 | 29 | To pause a job 30 | GET: 31 | /api/xgen/jobs/(job id)?pause=true 32 | 33 | resume 34 | GET: 35 | /api/xgen/jobs/(job id)?pause=false 36 | 37 | Stop all jbos 38 | POST: 39 | /api/xgen/clearall 40 | 41 | Empty analytics database and RDB. ONLY DO THIS IF YOU KNOW WHAT YOU ARE DOING! 42 | POST: 43 | /api/xgen/flush -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/Factories/LambdaFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Colossus; 3 | using Newtonsoft.Json.Linq; 4 | 5 | namespace ExperienceGenerator.Parsing.Factories 6 | { 7 | public class LambdaFactory : VariableFactory 8 | { 9 | private readonly Action _updateSegment; 10 | private readonly Action _setDefaults; 11 | 12 | public LambdaFactory(Action updateSegment = null, Action setDefaults = null) 13 | { 14 | _updateSegment = updateSegment; 15 | _setDefaults = setDefaults; 16 | } 17 | 18 | public override void UpdateSegment(VisitorSegment segment, JToken definition, XGenParser parser) 19 | { 20 | if (_updateSegment != null) _updateSegment(segment, definition, parser); 21 | } 22 | 23 | public override void SetDefaults(VisitorSegment segment, XGenParser parser) 24 | { 25 | if (_setDefaults != null) _setDefaults(segment, parser); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Colossus.Integration/App_Config/Include/Colossus/Colossus.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/App_Start/WebApiConfig.cs: -------------------------------------------------------------------------------- 1 | namespace ExperienceGenerator.Exm 2 | { 3 | using System.Web.Http; 4 | using ExperienceGenerator.Exm.Services; 5 | 6 | public static class WebApiConfig 7 | { 8 | public static void Register(HttpConfiguration config) 9 | { 10 | 11 | JobManager.Instance = new JobManager(); 12 | 13 | config.Routes.MapHttpRoute( 14 | name: "ExperienceGeneratorExmJobsApi", 15 | routeTemplate: "clientapi/xgen/exmjobs/{action}/{id}", 16 | defaults: new {controller = "ExmJobs", id = RouteParameter.Optional} 17 | ); 18 | config.Routes.MapHttpRoute( 19 | name: "ExperienceGeneratorExmEventsApi", 20 | routeTemplate: "clientapi/xgen/exmevents/{action}", 21 | defaults: new {controller = "ExmEvents"} 22 | ); 23 | config.Routes.MapHttpRoute( 24 | name: "ExmActionsApi", 25 | routeTemplate: "clientapi/xgen/exmactions/{action}/{id}", 26 | defaults: new { controller = "ExmActions", id = RouteParameter.Optional } 27 | ); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/TimePatcher.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Colossus.Web; 3 | using Sitecore.Analytics.Tracking; 4 | 5 | namespace Colossus.Integration.Processing 6 | { 7 | public class TimePatcher : ISessionPatcher 8 | { 9 | public void UpdateSession(Session session, RequestInfo requestInfo) 10 | { 11 | var startDate = DateTime.SpecifyKind(requestInfo.Visit.Start, DateTimeKind.Utc); 12 | var endDate = DateTime.SpecifyKind(requestInfo.Visit.End, DateTimeKind.Utc); 13 | 14 | session.Interaction.StartDateTime = startDate; 15 | session.Interaction.EndDateTime = endDate; 16 | 17 | var page = session.Interaction.CurrentPage; 18 | if (page != null) 19 | { 20 | var requestInfoStart = DateTime.SpecifyKind(requestInfo.Start, DateTimeKind.Utc); 21 | var requestInfoEnd = DateTime.SpecifyKind(requestInfo.End, DateTimeKind.Utc); 22 | 23 | page.DateTime = requestInfoStart; 24 | page.Duration = (int)Math.Round((requestInfoEnd - requestInfoStart).TotalMilliseconds); 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/TruncatedRandom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Colossus.Statistics 4 | { 5 | public class TruncatedRandom : IRandomGenerator 6 | { 7 | 8 | public static int MaxSamples = 50000; 9 | 10 | public IRandomGenerator Inner { get; set; } 11 | public double? Min { get; set; } 12 | public double? Max { get; set; } 13 | 14 | public TruncatedRandom(IRandomGenerator inner, double? min = null, double? max = null) 15 | { 16 | Inner = inner; 17 | Min = min; 18 | Max = max; 19 | } 20 | 21 | public double Next() 22 | { 23 | var i = 0; 24 | double value = 0d; 25 | do 26 | { 27 | value = Inner.Next(); 28 | 29 | if ( ++i > MaxSamples) throw new TimeoutException(string.Format("A value within the allowed range was not obtained after {0} samples", MaxSamples)); 30 | 31 | } while ((Min.HasValue && value < Min) || (Max.HasValue && value >= Max)); 32 | 33 | 34 | return value; 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /src/Colossus.Integration/Processing/TriggerEventsAction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Colossus.Web; 4 | using Sitecore.Analytics; 5 | using Sitecore.Analytics.Data; 6 | 7 | namespace Colossus.Integration.Processing 8 | { 9 | public class TriggerEventsAction : IRequestAction 10 | { 11 | public void Execute(ITracker tracker, RequestInfo requestInfo) 12 | { 13 | var events = requestInfo.Variables.GetOrDefault("TriggerEvents") as IEnumerable; 14 | 15 | if (events != null) 16 | { 17 | foreach (var e in events) 18 | { 19 | var eventData = tracker.Interaction.CurrentPage.Register(new PageEventData(e.Name, e.Id ?? Guid.Empty) {Text = e.Text}); 20 | 21 | if (e.CustomValues != null) 22 | { 23 | foreach (var kv in e.CustomValues) 24 | { 25 | eventData.CustomValues[kv.Key] = kv.Value; 26 | } 27 | } 28 | } 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Services/GetRandomCityService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Colossus; 5 | using Colossus.Statistics; 6 | using ExperienceGenerator.Data; 7 | using ExperienceGenerator.Repositories; 8 | using Sitecore; 9 | 10 | namespace ExperienceGenerator.Services 11 | { 12 | public class GetRandomCityService 13 | { 14 | private readonly GeoDataRepository _geoDataRepository; 15 | 16 | public GetRandomCityService() 17 | { 18 | _geoDataRepository = new GeoDataRepository(); 19 | } 20 | 21 | public City GetRandomCity(string subcontinentCode) 22 | { 23 | if (subcontinentCode == null) 24 | throw new ArgumentNullException(nameof(subcontinentCode)); 25 | 26 | var cities = _geoDataRepository.Cities.Where(c => c.Country.SubcontinentCode == subcontinentCode); 27 | return Sets.Weighted(builder => 28 | { 29 | foreach (var city in cities) 30 | { 31 | builder.Add(city, city.Population ?? 0); 32 | } 33 | })(); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Sliders/Slider Parameters.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "5395551f-bcd6-4b63-8a6d-d7d665cb302e" 3 | Parent: "907285a5-619e-46b9-b7af-9a6f7bae76e1" 4 | Template: "5cde79be-228f-4be5-b9d3-e63e365f1063" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Sliders/Slider Parameters 6 | DB: core 7 | SharedFields: 8 | - ID: "6d845445-ce74-4649-a2da-24f912a9471a" 9 | Hint: TitleValuesStep 10 | Value: 100 11 | - ID: "ce272a7d-d61d-4c13-a060-1b658c84b6c2" 12 | Hint: HideTooltip 13 | Type: Checkbox 14 | Value: 1 15 | Languages: 16 | - Language: en 17 | Versions: 18 | - Version: 1 19 | Fields: 20 | - ID: "0ec9416c-b808-45b4-9319-089cc747b6b8" 21 | Hint: Maximum 22 | Value: 100 23 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 24 | Hint: __Created 25 | Value: 20150505T111102Z 26 | - ID: "814faeb1-c6a9-4bf8-9224-03ec1b29a52b" 27 | Hint: Type 28 | Value: Single 29 | - ID: "e6d6a619-e0b5-4361-8c0e-ec8fc3d2f402" 30 | Hint: Minimum 31 | Value: 0 32 | - ID: "ff5074fa-9220-4dba-89af-61e82babdf02" 33 | Hint: SelectedValue 34 | Value: 50 35 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Sliders/Slider Parameters.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "7c26edfa-a15d-410b-b78d-3c95e89fd469" 3 | Parent: "a77343c6-4986-4a87-a7b6-beb7f6219f6d" 4 | Template: "5cde79be-228f-4be5-b9d3-e63e365f1063" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Sliders/Slider Parameters 6 | DB: core 7 | SharedFields: 8 | - ID: "6d845445-ce74-4649-a2da-24f912a9471a" 9 | Hint: TitleValuesStep 10 | Value: 100 11 | - ID: "ce272a7d-d61d-4c13-a060-1b658c84b6c2" 12 | Hint: HideTooltip 13 | Type: Checkbox 14 | Value: 1 15 | Languages: 16 | - Language: en 17 | Versions: 18 | - Version: 1 19 | Fields: 20 | - ID: "0ec9416c-b808-45b4-9319-089cc747b6b8" 21 | Hint: Maximum 22 | Value: 100 23 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 24 | Hint: __Created 25 | Value: 20150505T111102Z 26 | - ID: "814faeb1-c6a9-4bf8-9224-03ec1b29a52b" 27 | Hint: Type 28 | Value: Single 29 | - ID: "e6d6a619-e0b5-4361-8c0e-ec8fc3d2f402" 30 | Hint: Minimum 31 | Value: 0 32 | - ID: "ff5074fa-9220-4dba-89af-61e82babdf02" 33 | Hint: SelectedValue 34 | Value: 50 35 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/Sliders/Slider Parameters.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "42c0f5bc-b06e-4d4e-90dd-0be69b18a586" 3 | Parent: "40dc87de-206b-460c-bab7-7f23a23bd51b" 4 | Template: "5cde79be-228f-4be5-b9d3-e63e365f1063" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Sliders/Slider Parameters 6 | DB: core 7 | SharedFields: 8 | - ID: "6d845445-ce74-4649-a2da-24f912a9471a" 9 | Hint: TitleValuesStep 10 | Value: 100 11 | - ID: "ce272a7d-d61d-4c13-a060-1b658c84b6c2" 12 | Hint: HideTooltip 13 | Type: Checkbox 14 | Value: 1 15 | Languages: 16 | - Language: en 17 | Versions: 18 | - Version: 1 19 | Fields: 20 | - ID: "0ec9416c-b808-45b4-9319-089cc747b6b8" 21 | Hint: Maximum 22 | Value: 100 23 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 24 | Hint: __Created 25 | Value: 20150505T111102Z 26 | - ID: "814faeb1-c6a9-4bf8-9224-03ec1b29a52b" 27 | Hint: Type 28 | Value: Single 29 | - ID: "e6d6a619-e0b5-4361-8c0e-ec8fc3d2f402" 30 | Hint: Minimum 31 | Value: 0 32 | - ID: "ff5074fa-9220-4dba-89af-61e82babdf02" 33 | Hint: SelectedValue 34 | Value: 50 35 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/OffsetGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Statistics 8 | { 9 | public class OffsetGenerator : IRandomGenerator 10 | { 11 | public double Offset { get; set; } 12 | public IRandomGenerator Inner { get; set; } 13 | public double? Min { get; set; } 14 | public double? Max { get; set; } 15 | public bool Round { get; set; } 16 | 17 | public OffsetGenerator(IRandomGenerator inner, double offset, double? min = null, double? max = null, bool round = false) 18 | { 19 | Offset = offset; 20 | Inner = inner; 21 | Min = min; 22 | Max = max; 23 | Round = round; 24 | } 25 | 26 | public double Next() 27 | { 28 | var value = Min.HasValue && Max.HasValue 29 | ? Inner.Next().Shift(Offset, Min.Value, Max.Value) 30 | : Inner.Next() + Offset; 31 | 32 | if (Round) 33 | { 34 | value = Math.Round(value); 35 | } 36 | 37 | return value; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Repositories/GeoDataRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using ExperienceGenerator.Data; 4 | 5 | namespace ExperienceGenerator.Repositories 6 | { 7 | public class GeoDataRepository 8 | { 9 | private static GeoDataCache _cache; 10 | private static readonly object _lock = new object(); 11 | private List _cities; 12 | 13 | private static GeoDataCache Cache 14 | { 15 | get 16 | { 17 | lock (_lock) 18 | { 19 | return _cache ?? (_cache = GeoDataCache.FromResource()); 20 | } 21 | } 22 | } 23 | 24 | public List Cities => _cities ?? (_cities = Cache.Cities.ToList()); 25 | public List Continents => Cache.Continents; 26 | public List Countries => Cache.Countries.Values.ToList(); 27 | 28 | public List CitiesByCountry(int isoNumeric) 29 | { 30 | return Cache.CitiesByCountry[isoNumeric].ToList(); 31 | } 32 | public City CityByID(int id) 33 | { 34 | return Cache.Cities.FirstOrDefault(c => c.GeoNameId == id); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/MathNetGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using MathNet.Numerics.Distributions; 7 | 8 | namespace Colossus.Statistics 9 | { 10 | public class MathNetGenerator : IRandomGenerator 11 | { 12 | private Func _sampler; 13 | 14 | public double Scale { get; set; } 15 | public double Offset { get; set; } 16 | 17 | private MathNetGenerator(double scale = 1, double offset = 0) 18 | { 19 | Scale = scale; 20 | Offset = offset; 21 | } 22 | 23 | public MathNetGenerator(IContinuousDistribution distribution, double scale = 1, double offset = 0) 24 | :this(scale,offset) 25 | { 26 | _sampler = distribution.Sample; 27 | } 28 | 29 | public MathNetGenerator(IDiscreteDistribution distribution, double scale = 1, double offset = 0) 30 | : this(scale, offset) 31 | { 32 | _sampler = ()=>(double)distribution.Sample(); 33 | } 34 | 35 | public double Next() 36 | { 37 | return Scale*_sampler() + Offset; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/sitecore/shell/client/Applications/ExmExperienceGenerator/DataRepository.js: -------------------------------------------------------------------------------- 1 | define(["sitecore", "jquery", "underscore"], function (sc, $, _) { 2 | var urls = { 3 | devicesUrl: "/clientapi/xgen/devices", 4 | locationsUrl: "/clientapi/xgen/exmactions/locations" 5 | }; 6 | 7 | var dataRepository = { 8 | getDevices: function (callback) { 9 | $.ajax({ 10 | url:urls.devicesUrl 11 | }).success(function (data) { 12 | _.each(data, function (item) { 13 | item.Label = item.Name; 14 | }); 15 | 16 | var groupedDevices = _.map(_.groupBy(data, "Type"), function (item, idx) { 17 | return { 18 | Label: idx, 19 | Options: item 20 | } 21 | }); 22 | callback(groupedDevices); 23 | }); 24 | }, 25 | getLocations: function (callback) { 26 | $.ajax({ 27 | url: urls.locationsUrl 28 | }).success(callback); 29 | }, 30 | 31 | getItem:function(id, database, callback) { 32 | database = database || "master"; 33 | var db = new sc.Definitions.Data.Database(new sc.Definitions.Data.DatabaseUri(database)); 34 | db.getItem(id, callback); 35 | } 36 | }; 37 | 38 | return dataRepository; 39 | }); 40 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Campaign name.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ad79bed6-54a4-411d-a3d7-e80395cae098" 3 | Parent: "f4e1fc60-f41c-4ff7-96f3-a393cacf1c56" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Campaign name 6 | DB: core 7 | SharedFields: 8 | - ID: "b2a46ae4-38f9-4538-a2b3-8021083e0e40" 9 | Hint: Sortable 10 | Type: Checkbox 11 | Value: 1 12 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 13 | Hint: __Sortorder 14 | Value: 100 15 | - ID: "e67f1b1f-3488-4cf4-80ae-be285c918c2e" 16 | Hint: DataField 17 | Value: name 18 | Languages: 19 | - Language: en 20 | Versions: 21 | - Version: 1 22 | Fields: 23 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 24 | Hint: __Created 25 | Value: 20130408T114934 26 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 27 | Hint: HeaderText 28 | Value: Name 29 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 30 | Hint: __Created by 31 | Value: | 32 | sitecore\admin 33 | - ID: "75388012-d191-4561-8074-5340e149c0a5" 34 | Hint: SortField 35 | Value: name 36 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Subject.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "18a2ecbe-9405-4df0-b2c6-2a4f256f8016" 3 | Parent: "f4e1fc60-f41c-4ff7-96f3-a393cacf1c56" 4 | Template: "d3cefe6e-e51b-4a84-b92e-aaf8aa8e8dc8" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/List/Sent Messages/Subject 6 | DB: core 7 | SharedFields: 8 | - ID: "35e827ff-bb6c-4ed6-b79f-c41750ea5d46" 9 | Hint: HTMLTemplate 10 | Value: "{{subject}}" 11 | - ID: "b2a46ae4-38f9-4538-a2b3-8021083e0e40" 12 | Hint: Sortable 13 | Type: Checkbox 14 | Value: 1 15 | - ID: "ba3f86a2-4a1c-4d78-b63d-91c2779c1b5e" 16 | Hint: __Sortorder 17 | Value: 125 18 | Languages: 19 | - Language: en 20 | Versions: 21 | - Version: 1 22 | Fields: 23 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 24 | Hint: __Created 25 | Value: 20130408T114934 26 | - ID: "2e9fd749-0f47-4397-8ba2-c56c65366bf0" 27 | Hint: HeaderText 28 | Value: Subject 29 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 30 | Hint: __Created by 31 | Value: | 32 | sitecore\admin 33 | - ID: "75388012-d191-4561-8074-5340e149c0a5" 34 | Hint: SortField 35 | Value: subject 36 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Data/DeviceRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Concurrent; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace ExperienceGenerator.Data 6 | { 7 | public class DeviceRepository 8 | { 9 | private static readonly object lockObject = new object(); 10 | 11 | public DeviceRepository() 12 | { 13 | if (DeviceCache.Count != 0) 14 | return; 15 | lock (lockObject) 16 | { 17 | if (DeviceCache.Count == 0) 18 | { 19 | LoadDevices().ToList().ForEach(x => DeviceCache.TryAdd(x.Name, x)); 20 | } 21 | } 22 | } 23 | 24 | public IEnumerable GetAll() 25 | { 26 | return DeviceCache.Values; 27 | } 28 | 29 | private static IEnumerable LoadDevices() 30 | { 31 | return FileHelpers.ReadLinesFromResource("ExperienceGenerator.Data.devices.txt").Select(x => x.Trim()).Where(x => !x.StartsWith("#") && !string.IsNullOrWhiteSpace(x)).Select(Device.FromCsv); 32 | } 33 | 34 | private static readonly ConcurrentDictionary DeviceCache = new ConcurrentDictionary(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Colossus/Visitor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace Colossus 6 | { 7 | public class Visitor : SimulationObject 8 | { 9 | public VisitorSegment Segment { get; set; } 10 | 11 | public List Visits { get; set; } 12 | 13 | public Visitor(VisitorSegment segment) 14 | { 15 | Segment = segment; 16 | Visits = new List(); 17 | } 18 | 19 | public Visit AddVisit(TimeSpan? pause = null) 20 | { 21 | var lastVisit = Visits.Count > 0 ? Visits[Visits.Count - 1].End : Start; 22 | lastVisit += pause ?? TimeSpan.Zero; 23 | var visit = new Visit { Visitor = this, Start = lastVisit, End = lastVisit }; 24 | 25 | Visits.Add(visit); 26 | End = visit.End; 27 | 28 | if (Segment != null) 29 | { 30 | foreach (var v in Segment.VisitVariables) 31 | { 32 | v.SetValues(visit); 33 | } 34 | foreach (var v in Segment.VisitorVariables) 35 | { 36 | v.SetValues(visit.Visitor); 37 | } 38 | } 39 | 40 | return visit; 41 | } 42 | 43 | public IEnumerable Commit() 44 | { 45 | var behavior = Segment.Behavior(); 46 | return behavior == null ? Enumerable.Empty() : behavior.Commit(this); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/Unicorn/Unicorn.PowerShell.config: -------------------------------------------------------------------------------- 1 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/Factories/ContactDataVariable.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Colossus; 3 | using Faker; 4 | 5 | namespace ExperienceGenerator.Parsing.Factories 6 | { 7 | public class ContactDataVariable : VisitorVariablesBase 8 | { 9 | public static int VisitorIndex; 10 | 11 | public double IdentifiedPercentage { get; set; } 12 | 13 | public ContactDataVariable(double identifiedPercentage) 14 | { 15 | IdentifiedPercentage = identifiedPercentage; 16 | } 17 | 18 | public override void SetValues(SimulationObject target) 19 | { 20 | if (!(Randomness.Random.NextDouble() < IdentifiedPercentage)) 21 | return; 22 | 23 | target.Variables["ContactId"] = "XGen" + VisitorIndex; 24 | VisitorIndex++; 25 | 26 | var firstName = Name.First(); 27 | var lastName = Name.Last(); 28 | 29 | target.Variables["ContactFirstName"] = firstName; 30 | target.Variables["ContactLastName"] = lastName; 31 | target.Variables["ContactEmail"] = Internet.Email(firstName + " " + lastName); 32 | } 33 | 34 | public override IEnumerable ProvidedVariables => new[] { "ContactId", "ContactFirstName", "ContactLastName", "ContactEmail" }; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/WeightedSetBuilder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Statistics 8 | { 9 | public class WeightedSetBuilder 10 | { 11 | private List> _weights; 12 | public WeightedSetBuilder() 13 | { 14 | _weights = new List>(); 15 | } 16 | 17 | public WeightedSetBuilder Add(TValue value, double weight = 1d) 18 | { 19 | if (weight > 0) 20 | { 21 | _weights.Add(new KeyValuePair(value, weight)); 22 | } 23 | return this; 24 | } 25 | 26 | public Func Build() 27 | { 28 | if (_weights.Count == 0) throw new InvalidOperationException("No items specified"); 29 | if (_weights.Count == 1) return () => _weights[0].Key; 30 | 31 | var set = new WeightedRandom(_weights.Select(w => w.Value)); 32 | 33 | return () => _weights[(int)set.Next()].Key; 34 | } 35 | 36 | public static implicit operator Func(WeightedSetBuilder builder) 37 | { 38 | return builder.Build(); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Start/WebApiConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Http; 2 | using ExperienceGenerator.Client.Infrastructure; 3 | using Sitecore.Analytics.Aggregation.Data.Model; 4 | 5 | namespace ExperienceGenerator.Client 6 | { 7 | public static class WebApiConfig 8 | { 9 | public static void Register(HttpConfiguration config) 10 | { 11 | // Web API configuration and services 12 | 13 | // Web API routes 14 | //config.MapHttpAttributeRoutes(); 15 | 16 | //Disable dimension cache to enable flush of reporting database 17 | Dimension.EnableCaching = false; 18 | 19 | XGenJobManager.Instance = new XGenSitecoreJobManager(); 20 | 21 | config.Routes.MapHttpRoute( 22 | name: "ExperienceGeneratorJobsApi", 23 | routeTemplate: "clientapi/xgen/jobs/{id}", 24 | defaults: new {controller = "ExperienceGeneratorJobs", id = RouteParameter.Optional} 25 | ); 26 | 27 | 28 | config.Routes.MapHttpRoute( 29 | name: "ExperienceGeneratorActionsApi", 30 | routeTemplate: "clientapi/xgen/{action}/{id}", 31 | defaults: new {controller = "ExperienceGeneratorActions", id = RouteParameter.Optional} 32 | ); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/NoiseHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Colossus.Statistics 8 | { 9 | public static class NoiseHelper 10 | { 11 | public static double MultiplicativeNoise(this double d, double scale) 12 | { 13 | //return d*((1 - noise) + 2*Randomness.Random.NextDouble()*noise); 14 | 15 | return d + d*(Randomness.Random.NextDouble() - .5)*scale; 16 | } 17 | 18 | public static double AdditiveNoise(this double d, double scale) 19 | { 20 | return d + Randomness.Random.NextDouble()*scale; 21 | } 22 | 23 | public static double Shift(this double val, double shift, double min = 0, double max = 1) 24 | { 25 | val = (val - min + shift) % (max - min); 26 | if (val < 0) 27 | { 28 | val += (max - min); 29 | } 30 | val += min; 31 | return val; 32 | } 33 | 34 | public static IRandomGenerator Offset(this IRandomGenerator gen, double offset, double? min = null, 35 | double? max = null, bool round = false) 36 | { 37 | return new OffsetGenerator(gen, offset, min: min, max: max, round: round); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/Colossus.Integration/web.Debug.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Web.Debug.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /src/Colossus/Web/ResponseInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Net; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using HtmlAgilityPack; 9 | using Newtonsoft.Json; 10 | 11 | namespace Colossus.Web 12 | { 13 | public class ResponseInfo 14 | { 15 | public HttpStatusCode StatusCode { get; set; } 16 | public string Response { get; set; } 17 | 18 | 19 | public void ParseHttpResponse(HttpWebResponse response) 20 | { 21 | if (response == null) return; 22 | 23 | var httpResponse = response; 24 | StatusCode = httpResponse.StatusCode; 25 | } 26 | 27 | private HtmlDocument _document; 28 | [JsonIgnore] 29 | public HtmlNode DocumentNode 30 | { 31 | get 32 | { 33 | 34 | if (_document == null) 35 | { 36 | try 37 | { 38 | _document = new HtmlDocument(); 39 | _document.LoadHtml(Response); 40 | } 41 | catch 42 | { 43 | return null; 44 | } 45 | } 46 | 47 | return _document.DocumentNode; 48 | } 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/Unicorn/Unicorn.UI.IdentityServer.config: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | 20 | /unicorn.aspx 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/App_Config/Include/ExperienceGenerator/ExmExperienceGenerator.Serialization.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # escape=` 2 | 3 | ARG BASE_IMAGE 4 | ARG BUILD_IMAGE 5 | 6 | FROM ${BUILD_IMAGE} as build 7 | 8 | ARG INTERNAL_NUGET_SOURCE 9 | ARG INTERNAL_NUGET_SOURCE_USERNAME="VSTS" 10 | ARG INTERNAL_NUGET_SOURCE_PASSWORD 11 | 12 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 13 | 14 | WORKDIR /project 15 | COPY src/ ./src 16 | COPY ExperienceGenerator.sln . 17 | COPY nuget.config . 18 | COPY docker/scripts/Add-InternalNugetFeed.ps1 . 19 | 20 | RUN .\Add-InternalNugetFeed.ps1 21 | 22 | RUN msbuild /m:1 /p:Configuration="Release" /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=false /p:publishUrl=C:\out\xGenerator /p:BuildProjectReferences=true /target:Build "ExperienceGenerator.sln" /restore 23 | 24 | FROM ${BUILD_IMAGE} as data 25 | 26 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 27 | 28 | COPY docker/scripts/Packaging/ /packaging 29 | 30 | COPY /src/serialization /items 31 | 32 | # Install latest PackageProvider (required for Sitecore.Courier) 33 | RUN Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force 34 | RUN .\packaging\generate-update-package.ps1 -target /items -output /out/db 35 | 36 | FROM ${BASE_IMAGE} as solution 37 | 38 | COPY --from=build /out/xgenerator /module/cm/content 39 | COPY --from=data /out/db /module/db -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/ExperienceGenerator/ExperienceGenerator.Serialization.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Colossus.Integration/web.Release.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /src/Colossus/VisitorSegment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Colossus.Statistics; 5 | 6 | namespace Colossus 7 | { 8 | public class VisitorSegment 9 | { 10 | public string Name { get; set; } 11 | 12 | public List VisitorVariables { get; set; } 13 | 14 | public List VisitVariables { get; set; } 15 | 16 | public List RequestVariables { get; set; } 17 | 18 | public DateGenerator DateGenerator { get; set; } 19 | 20 | public Func Behavior { get; set; } 21 | 22 | public VisitorSegment(string name) 23 | { 24 | Name = name; 25 | VisitorVariables = new List(); 26 | VisitVariables = new List(); 27 | RequestVariables = new List(); 28 | DateGenerator = new DateGenerator(); 29 | } 30 | 31 | public void SortVariables() 32 | { 33 | VisitorVariables = VisitorVariables.TopologicalSort( 34 | (x, other) => other.Any(x.DependsOn)); 35 | VisitVariables = VisitVariables.TopologicalSort( 36 | (x, other) => other.Any(x.DependsOn)); 37 | RequestVariables = RequestVariables.TopologicalSort( 38 | (x, other) => other.Any(x.DependsOn)); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Web.Release.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /src/Colossus/CompositeVariable.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace Colossus 5 | { 6 | public class CompositeVariable : VisitorVariablesBase 7 | { 8 | public IVisitorVariables Var1 { get; set; } 9 | public IVisitorVariables Var2 { get; set; } 10 | public double Var2Prob { get; set; } 11 | 12 | public CompositeVariable(IVisitorVariables var1, IVisitorVariables var2, double var2Prob) 13 | { 14 | Var1 = var1; 15 | Var2 = var2; 16 | Var2Prob = var2Prob; 17 | } 18 | 19 | public override void SetValues(SimulationObject target) 20 | { 21 | var var = Randomness.Random.NextDouble() < Var2Prob ? Var2 : Var1; 22 | var.SetValues(target); 23 | } 24 | 25 | public override IEnumerable ProvidedVariables { get 26 | { 27 | return Var1.ProvidedVariables.Concat(Var2.ProvidedVariables).Distinct(); 28 | } } 29 | 30 | public IEnumerable DependendtVariables 31 | { 32 | get 33 | { 34 | return Var1.DependendtVariables.Concat(Var2.DependendtVariables).Distinct(); 35 | } 36 | } 37 | 38 | protected override bool Equals(VisitorVariablesBase other) 39 | { 40 | var o = other as CompositeVariable; 41 | 42 | return o != null && o.Var1.Equals(Var1); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/Factories/OutcomeVariable.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Colossus; 5 | using Colossus.Integration.Processing; 6 | 7 | namespace ExperienceGenerator.Parsing.Factories 8 | { 9 | public class OutcomeVariable : VisitorVariablesBase 10 | { 11 | public Func> Outcomes { get; set; } 12 | public Func ValueDistribution { get; set; } 13 | 14 | public OutcomeVariable(Func> outcomes, Func valueDistribution) 15 | { 16 | Outcomes = outcomes; 17 | ValueDistribution = valueDistribution; 18 | } 19 | 20 | public override void SetValues(SimulationObject target) 21 | { 22 | var outcomes = Outcomes(); 23 | 24 | if (outcomes.Any()) 25 | { 26 | target.Variables["TriggerOutcomes"] = 27 | outcomes.Select(oc => 28 | 29 | new TriggerOutcomeData 30 | { 31 | DefinitionId = Guid.Parse(oc), 32 | MonetaryValue = (decimal) ValueDistribution() 33 | } 34 | ).ToList(); 35 | } 36 | } 37 | 38 | public override IEnumerable ProvidedVariables 39 | { 40 | get { yield return "TriggerOutcomes"; } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/Unicorn/Unicorn.zSharedSecret.config: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | 749CABBC85EAD20CE55E2C6066F1BE375D2115696C8A8B24DB6ED1FD60613086 19 | 24 | false 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("ExperienceGenerator.Exm")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("ExperienceGenerator.Exm")] 12 | [assembly: AssemblyCopyright("Copyright © 2016")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("45448aac-dc97-4dc6-b7a0-d1b5700b2511")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Revision and Build Numbers 32 | // by using the '*' as shown below: 33 | [assembly: AssemblyVersion("1.0.0.0")] 34 | [assembly: AssemblyFileVersion("1.0.0.0")] 35 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ExperienceGenerator")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ExperienceGenerator")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("986fe7a5-3aab-479e-b9a5-10715537308e")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /src/Colossus/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Colossus")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Colossus")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("f3e7c524-eecd-4688-900d-5de5cd4bc43c")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Exm/Infrastructure/UpdateFakeGeoData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using ExperienceGenerator.Repositories; 4 | using Sitecore.Analytics.Pipelines.CommitSession; 5 | 6 | namespace ExperienceGenerator.Exm.Infrastructure 7 | { 8 | public class UpdateFakeGeoData : CommitSessionProcessor 9 | { 10 | private readonly GeoDataRepository _geoDataRepository; 11 | 12 | public UpdateFakeGeoData() 13 | { 14 | _geoDataRepository = new GeoDataRepository(); 15 | } 16 | 17 | public override void Process(CommitSessionPipelineArgs args) 18 | { 19 | if (args.Session?.Interaction?.UserAgent == null) 20 | return; 21 | var userAgent = args.Session?.Interaction?.UserAgent; 22 | var substrings = userAgent.Split(new [] {';', ')', '('}, StringSplitOptions.RemoveEmptyEntries); 23 | var cityComment = substrings.FirstOrDefault(s => s.Trim().StartsWith("city:")); 24 | if (cityComment == null) 25 | return; 26 | var cityIdString = cityComment.Substring(5); 27 | int cityId; 28 | if (!int.TryParse(cityIdString, out cityId)) 29 | return; 30 | var city = _geoDataRepository.CityByID(cityId); 31 | if (city == null) 32 | return; 33 | args.Session.Interaction.SetWhoIsInformation(city.ToWhoIsInformation()); 34 | args.Session.Interaction.UpdateLocationReference(); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/serialization/ExmExperienceGenerator/ExmExperienceGenerator.Core.Application/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Test summary.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "c715d760-d109-4080-813b-40006feec60a" 3 | Parent: "08ad1b64-5c46-46a8-a643-c26397c5b8cc" 4 | Template: "6437cfd5-76ca-48aa-bfbd-8b8d73eb5581" 5 | Path: /sitecore/client/Applications/ExmExperienceGenerator/ExmGenerator/PageSettings/Texts/Test summary 6 | DB: core 7 | Languages: 8 | - Language: da 9 | Versions: 10 | - Version: 1 11 | Fields: 12 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 13 | Hint: __Created 14 | Value: 20160812T190446Z 15 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 16 | Hint: __Created by 17 | Value: | 18 | sitecore\admin 19 | - Language: "de-DE" 20 | Versions: 21 | - Version: 1 22 | Fields: 23 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 24 | Hint: __Created 25 | Value: 20160812T190446Z 26 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 27 | Hint: __Created by 28 | Value: | 29 | sitecore\admin 30 | - Language: en 31 | Versions: 32 | - Version: 1 33 | Fields: 34 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 35 | Hint: __Created 36 | Value: 20160812T190446Z 37 | - Language: "ja-JP" 38 | Versions: 39 | - Version: 1 40 | Fields: 41 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 42 | Hint: __Created 43 | Value: 20160812T190446Z 44 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 45 | Hint: __Created by 46 | Value: | 47 | sitecore\admin 48 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/LinearGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Colossus.Statistics 4 | { 5 | public class LinearGenerator : IRandomGenerator 6 | { 7 | private Random _random; 8 | public double Min { get; set; } 9 | public double Max { get; set; } 10 | public double Start { get; set; } 11 | public double End { get; set; } 12 | public double Increase { get; set; } 13 | 14 | public LinearGenerator(double min = 0, double max = 1, double start = 1, double end = 1) 15 | { 16 | _random = Randomness.Random; 17 | Min = min; 18 | Max = max; 19 | Start = start; 20 | End = end; 21 | } 22 | 23 | 24 | double Cdf(double t) 25 | { 26 | return 0.5 * (End * t * t - Start * t * t) + Start * t; 27 | } 28 | 29 | double Quantile(double u) 30 | { 31 | return (Start - Math.Sqrt(2 * End * u + Start * Start - 2 * Start * u)) / (Start - End); 32 | } 33 | 34 | public double Next() 35 | { 36 | if (Min == Max) return Min; 37 | 38 | if (Start == End) 39 | { 40 | return Min + (Max - Min) * _random.NextDouble(); 41 | } 42 | 43 | var u = _random.NextDouble() * (Cdf(1) - Cdf(0)); 44 | return Min + (Max - Min) * Quantile(u); 45 | } 46 | 47 | public static LinearGenerator Fixed(double value) 48 | { 49 | return new LinearGenerator(value, value); 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ExperienceGenerator")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ExperienceGenerator")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("5da0b725-a88a-47bb-b3e9-46d5d9c8c5d8")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Colossus.Integration")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Colossus.Integration")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("128f12d5-b967-4f82-8fcb-611586abd0df")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /src/Colossus.Integration/Models/SitecoreVisitContext.cs: -------------------------------------------------------------------------------- 1 | using Colossus.Web; 2 | using Sitecore.Analytics.Model; 3 | 4 | namespace Colossus.Integration.Models 5 | { 6 | 7 | public class SitecoreVisitRequestContext : WebVisitRequestContext 8 | { 9 | public new SitecoreRequestContext VisitorContext 10 | { 11 | get { return base.VisitorContext as SitecoreRequestContext; } 12 | } 13 | 14 | public SitecoreVisitRequestContext(WebRequestContext visitorContext, Visit visit) 15 | : base(visitorContext, visit) 16 | { 17 | 18 | } 19 | 20 | public VisitData VisitData { get; protected set; } 21 | static object syncRoot = new object(); 22 | 23 | protected override void EndVisit() 24 | { 25 | lock (syncRoot) 26 | { 27 | var req = new Request 28 | { 29 | Visit = this.Visit, 30 | Url = this.VisitorContext.ColossusHandlerUrl, 31 | EndVisit = true 32 | }; 33 | 34 | this.Execute(req); 35 | base.EndVisit(); 36 | } 37 | } 38 | 39 | protected override SitecoreResponseInfo Execute(Request request) 40 | { 41 | var response = base.Execute(request); 42 | 43 | if (response.VisitData != null) 44 | { 45 | this.VisitData = response.VisitData; 46 | } 47 | 48 | return response; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/Unicorn/Unicorn.Users.DataProvider.config: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/Colossus/Statistics/ExponentialGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Colossus.Statistics 4 | { 5 | public class ExponentialGenerator : IRandomGenerator 6 | { 7 | private Random _random; 8 | public double Lambda { get; set; } 9 | public double? MaxValue { get; set; } 10 | 11 | public ExponentialGenerator(double lambda, double? maxValue = null) 12 | { 13 | _random = Randomness.Random; 14 | Lambda = lambda; 15 | MaxValue = maxValue; 16 | } 17 | 18 | public static double Cdf(double x, double lambda) 19 | { 20 | return 1 - Math.Exp(-lambda * x); 21 | } 22 | 23 | public static double Quantile(double u, double lambda) 24 | { 25 | return -Math.Log(1 - u) / lambda; 26 | } 27 | 28 | public double Next() 29 | { 30 | return Quantile((MaxValue.HasValue ? Cdf(MaxValue.Value, Lambda) : 1) * _random.NextDouble(), Lambda); 31 | } 32 | 33 | public static ExponentialGenerator TopPerecentage(double topPct, double belowValue, double? maxValue = null) 34 | { 35 | var lambda = -Math.Log(1 - topPct) / belowValue; 36 | if (maxValue.HasValue) 37 | { 38 | //Can't find closed form expression for alpha. Nor can http://www.wolframalpha.com/ 39 | lambda = 40 | Solver.BrentsMethodSolve( 41 | l => Cdf(belowValue, l) / Cdf(maxValue.Value, l) - topPct, 1e-5, lambda); 42 | } 43 | return new ExponentialGenerator(lambda, maxValue); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/Unicorn/Unicorn.DataProvider.config: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | $(1) 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | dataProviders/unicorn 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | dataProviders/unicorn 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/ExperienceGenerator.Client/App_Config/Include/Unicorn/Unicorn.Roles.DataProvider.config: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/Colossus/SegmentBasedSimulator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Colossus.Statistics; 4 | 5 | namespace Colossus 6 | { 7 | public class SegmentBasedSimulator : IVisitSimulator 8 | { 9 | private readonly Func _segments; 10 | 11 | public SegmentBasedSimulator(VisitorSegment segment) 12 | { 13 | _segments = () => segment; 14 | } 15 | 16 | public SegmentBasedSimulator(Action> segments) : this(Sets.Weighted(segments)) 17 | { 18 | } 19 | 20 | public SegmentBasedSimulator(Func segments) 21 | { 22 | _segments = segments; 23 | } 24 | 25 | public Visitor GetNextVisitor() 26 | { 27 | var segment = _segments(); 28 | 29 | var visitor = new Visitor(segment) 30 | { 31 | Start = segment.DateGenerator.NextDate() 32 | }; 33 | visitor.End = visitor.Start; 34 | 35 | foreach (var var in segment.VisitorVariables) 36 | { 37 | var.SetValues(visitor); 38 | } 39 | 40 | return visitor; 41 | } 42 | 43 | public IEnumerable GetVisitors(int count) 44 | { 45 | for (var i = 0; i < count; i++) 46 | { 47 | yield return GetNextVisitor(); 48 | } 49 | } 50 | 51 | public static SegmentBasedSimulator RoundRobin(params VisitorSegment[] segments) 52 | { 53 | var index = 0; 54 | return new SegmentBasedSimulator(() => segments[index++%segments.Length]); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/Colossus/GetSetHelpers.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Web; 4 | using Colossus.Web; 5 | 6 | namespace Colossus 7 | { 8 | public static class GetSetHelpers 9 | { 10 | 11 | public static RequestInfo ColossusInfo(this HttpContext ctx) 12 | { 13 | if (ctx == null) return null; 14 | 15 | var info = ctx.Items[DataEncoding.RequestDataKey] as RequestInfo; 16 | 17 | 18 | if (info == null) 19 | { 20 | var data = ctx.Request.Headers.GetChunked(DataEncoding.RequestDataKey); 21 | if (data != null) 22 | { 23 | ctx.Items[DataEncoding.RequestDataKey] = info = DataEncoding.DecodeHeaderValue(data); 24 | } 25 | } 26 | 27 | return info; 28 | } 29 | 30 | public static TValue TryGetValue(this TObject o, Func getter, 31 | TValue defaultValue = default(TValue)) 32 | { 33 | return o == null ? defaultValue : getter(o); 34 | } 35 | 36 | public static bool SetIfPresent(this IDictionary dict, string key, Action action) 37 | { 38 | return dict.SetIfPresent(key, action); 39 | } 40 | 41 | public static bool SetIfPresent(this IDictionary dict, string key, Action action) 42 | { 43 | object val; 44 | if (dict.TryGetValue(key, out val)) 45 | { 46 | if (val is TValue) 47 | { 48 | action((TValue) val); 49 | return true; 50 | } 51 | } 52 | 53 | return false; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/Colossus/Visit.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Colossus 5 | { 6 | public class Visit : SimulationObject 7 | { 8 | public Visitor Visitor { get; set; } 9 | 10 | public List Requests { get; set; } 11 | 12 | public Visit() 13 | { 14 | Requests = new List(); 15 | } 16 | 17 | public Request AddRequest(string url, TimeSpan? duration = null, TimeSpan? pause = null, 18 | string durationVariable = "Duration", string pauseVariable = "Pause") 19 | { 20 | var request = new Request { Visit = this, Url = url }; 21 | if (Visitor.Segment != null) 22 | { 23 | foreach (var v in Visitor.Segment.RequestVariables) 24 | { 25 | v.SetValues(request); 26 | } 27 | } 28 | 29 | var lastRequest = Requests.Count > 0 ? Requests[Requests.Count - 1].End : Start; 30 | lastRequest += pause ?? request.GetVariable(pauseVariable, request.GetVariable("Pause", TimeSpan.Zero)); 31 | 32 | request.Start = lastRequest; 33 | request.End = lastRequest + (duration ?? request.GetVariable(durationVariable, request.GetVariable("Duration", TimeSpan.Zero))); 34 | 35 | 36 | End = request.End; 37 | Visitor.End = End; 38 | 39 | if (Requests.Count == 0 && !request.Variables.ContainsKey("Referrer")) 40 | { 41 | var referrer = this.GetVariable("Referrer"); 42 | if (!string.IsNullOrEmpty(referrer)) 43 | { 44 | request.Variables.Add("Referrer", referrer); 45 | } 46 | } 47 | 48 | Requests.Add(request); 49 | 50 | return request; 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/Factories/MonthFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Colossus; 5 | using Colossus.Statistics; 6 | using Newtonsoft.Json.Linq; 7 | 8 | namespace ExperienceGenerator.Parsing.Factories 9 | { 10 | public class MonthFactory : VariableFactory 11 | { 12 | 13 | private readonly double[] _partsOfYears; 14 | 15 | public MonthFactory() 16 | { 17 | var rd = new DateTime(2014, 1, 1); 18 | var dates = new List(); 19 | dates.Add(new DateTime(rd.Year - 1, 12, DateTime.DaysInMonth(rd.Year - 1, 12)/2)); 20 | for (var i = 1; i <= 12; i++) 21 | { 22 | dates.Add(new DateTime(2014, i, DateTime.DaysInMonth(2014, i)/2)); 23 | } 24 | dates.Add(new DateTime(rd.Year + 1, 1, DateTime.DaysInMonth(rd.Year - 1, 1) / 2)); 25 | 26 | _partsOfYears = dates.Select(d => (d - rd).TotalDays/365d).ToArray(); 27 | } 28 | 29 | public override void UpdateSegment(VisitorSegment segment, JToken definition, XGenParser parser) 30 | { 31 | var weights = Enumerable.Range(1, 12).Select(i => 0d).ToArray(); 32 | foreach (var kv in (JObject) definition) 33 | { 34 | weights[int.Parse(kv.Key) - 1] = kv.Value.Value(); 35 | } 36 | 37 | segment.DateGenerator.PartOfYear(t => 38 | { 39 | t.Clear(); 40 | t.MoveAbsolute(0, (weights[0] + weights[11])/2); 41 | for (var i = 0; i < weights.Length; i++) 42 | { 43 | t.LineAbsolute(_partsOfYears[i + 1], weights[i]); 44 | } 45 | t.LineAbsolute(1, (weights[0] + weights[11]) / 2); 46 | }); 47 | } 48 | } 49 | } 50 | 51 | -------------------------------------------------------------------------------- /src/ExperienceGenerator/Parsing/Factories/IdentifiedContactDataVariable.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Colossus; 3 | 4 | namespace ExperienceGenerator.Parsing.Factories 5 | { 6 | 7 | public class IdentifiedContactDataVariable : VisitorVariablesBase 8 | { 9 | public override void SetValues(SimulationObject target) 10 | { 11 | target.Variables["ContactId"] = this.Email; 12 | target.Variables["ContactFirstName"] = this.FirstName; 13 | target.Variables["ContactMiddleName"] = this.MiddleName; 14 | target.Variables["ContactLastName"] = this.LastName; 15 | target.Variables["ContactEmail"] = this.Email; 16 | target.Variables["ContactGender"] = this.Gender; 17 | target.Variables["ContactBirthDate"] = this.BirthDate; 18 | target.Variables["ContactJobTitle"] = this.JobTitle; 19 | target.Variables["ContactPhone"] = this.Phone; 20 | target.Variables["ContactPicture"] = this.Picture; 21 | target.Variables["ContactAddress"] = this.Address; 22 | } 23 | 24 | public string Email { get; set; } 25 | public string LastName { get; set; } 26 | public string FirstName { get; set; } 27 | public string MiddleName { get; set; } 28 | public string BirthDate { get; set; } 29 | public string Gender { get; set; } 30 | public string JobTitle { get; set; } 31 | public string Phone { get; set; } 32 | public string Picture { get; set; } 33 | public string Address { get; set; } 34 | 35 | public override IEnumerable ProvidedVariables => new[] 36 | { 37 | "ContactId", 38 | "ContactFirstName", 39 | "ContactMiddleName", 40 | "ContactLastName", 41 | "ContactEmail", 42 | "ContactGender", 43 | "ContactBirthDate", 44 | "ContactJobTitle", 45 | "ContactPhone", 46 | "ContactPicture", 47 | "ContactAddress" 48 | }; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Tabs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "40463b45-8869-4a7e-b86e-2fdc8ce1ae57" 3 | Parent: "eb911a25-00ff-465e-9794-c6046fb24a8f" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Tabs 6 | DB: core 7 | Languages: 8 | - Language: da 9 | Fields: 10 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 11 | Hint: __Display name 12 | Value: Faner 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: "20150314T040858:635619029387798384Z" 19 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 20 | Hint: __Created by 21 | Value: | 22 | sitecore\admin 23 | - Language: "de-DE" 24 | Fields: 25 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 26 | Hint: __Display name 27 | Value: Tabs 28 | Versions: 29 | - Version: 1 30 | Fields: 31 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 32 | Hint: __Created 33 | Value: "20150314T041139:635619030997144893Z" 34 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 35 | Hint: __Created by 36 | Value: | 37 | sitecore\admin 38 | - Language: en 39 | Versions: 40 | - Version: 1 41 | Fields: 42 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 43 | Hint: __Created 44 | Value: 20140708T173320 45 | - Language: "ja-JP" 46 | Fields: 47 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 48 | Hint: __Display name 49 | Value: タブ 50 | Versions: 51 | - Version: 1 52 | Fields: 53 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 54 | Hint: __Created 55 | Value: "20150314T041014:635619030146534590Z" 56 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 57 | Hint: __Created by 58 | Value: | 59 | sitecore\admin 60 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/Contacts/PageSettings/Texts.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "5fdba48b-53b2-4e3d-80e6-7d36fa98fdd5" 3 | Parent: "9d7fab6c-778a-460e-b6ee-508222174804" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/Contacts/PageSettings/Texts 6 | DB: core 7 | Languages: 8 | - Language: da 9 | Fields: 10 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 11 | Hint: __Display name 12 | Value: Tekster 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: "20150314T040848:635619029289989014Z" 19 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 20 | Hint: __Created by 21 | Value: | 22 | sitecore\admin 23 | - Language: "de-DE" 24 | Fields: 25 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 26 | Hint: __Display name 27 | Value: Texte 28 | Versions: 29 | - Version: 1 30 | Fields: 31 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 32 | Hint: __Created 33 | Value: "20150314T041125:635619030852932044Z" 34 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 35 | Hint: __Created by 36 | Value: | 37 | sitecore\admin 38 | - Language: en 39 | Versions: 40 | - Version: 1 41 | Fields: 42 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 43 | Hint: __Created 44 | Value: 20140702T120534 45 | - Language: "ja-JP" 46 | Fields: 47 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 48 | Hint: __Display name 49 | Value: テキスト 50 | Versions: 51 | - Version: 1 52 | Fields: 53 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 54 | Hint: __Created 55 | Value: "20150314T041001:635619030019973845Z" 56 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 57 | Hint: __Created by 58 | Value: | 59 | sitecore\admin 60 | -------------------------------------------------------------------------------- /src/serialization/ExperienceGenerator/ExperienceGenerator.Core.Application/ExperienceGenerator/DataSheet/PageSettings/Texts.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ID: "ae110b84-5964-4494-a84e-dd773d22307a" 3 | Parent: "eb911a25-00ff-465e-9794-c6046fb24a8f" 4 | Template: "a87a00b1-e6db-45ab-8b54-636fec3b5523" 5 | Path: /sitecore/client/Applications/ExperienceGenerator/DataSheet/PageSettings/Texts 6 | DB: core 7 | Languages: 8 | - Language: da 9 | Fields: 10 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 11 | Hint: __Display name 12 | Value: Tekster 13 | Versions: 14 | - Version: 1 15 | Fields: 16 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 17 | Hint: __Created 18 | Value: "20150314T040848:635619029289989014Z" 19 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 20 | Hint: __Created by 21 | Value: | 22 | sitecore\admin 23 | - Language: "de-DE" 24 | Fields: 25 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 26 | Hint: __Display name 27 | Value: Texte 28 | Versions: 29 | - Version: 1 30 | Fields: 31 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 32 | Hint: __Created 33 | Value: "20150314T041125:635619030852932044Z" 34 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 35 | Hint: __Created by 36 | Value: | 37 | sitecore\admin 38 | - Language: en 39 | Versions: 40 | - Version: 1 41 | Fields: 42 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 43 | Hint: __Created 44 | Value: 20140702T120534 45 | - Language: "ja-JP" 46 | Fields: 47 | - ID: "b5e02ad9-d56f-4c41-a065-a133db87bdeb" 48 | Hint: __Display name 49 | Value: テキスト 50 | Versions: 51 | - Version: 1 52 | Fields: 53 | - ID: "25bed78c-4957-4165-998a-ca1b52f67497" 54 | Hint: __Created 55 | Value: "20150314T041001:635619030019973845Z" 56 | - ID: "5dd74568-4d4b-44c1-b513-0af5f4cda34f" 57 | Hint: __Created by 58 | Value: | 59 | sitecore\admin 60 | --------------------------------------------------------------------------------