[{"data":1,"prerenderedAt":434},["ShallowReactive",2],{"navigation_docs":3,"-engineering-deployment":209,"-engineering-deployment-surround":430},[4,8,50,75,133,149,162,171,205],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"path":10,"stem":11,"children":12,"page":49},"Company","\u002Fcompany","1.company",[13,17,21,25,29,33,37,41,45],{"title":14,"path":15,"stem":16},"About","\u002Fcompany\u002Fabout","1.company\u002F0.about",{"title":18,"path":19,"stem":20},"Values","\u002Fcompany\u002Fvalues","1.company\u002F1.values",{"title":22,"path":23,"stem":24},"Communication","\u002Fcompany\u002Fcommunication","1.company\u002Fcommunication",{"title":26,"path":27,"stem":28},"Competition","\u002Fcompany\u002Fcompetition","1.company\u002Fcompetition",{"title":30,"path":31,"stem":32},"Hybrid Working","\u002Fcompany\u002Fhybrid-working","1.company\u002Fhybrid-working",{"title":34,"path":35,"stem":36},"Operations","\u002Fcompany\u002Foperations","1.company\u002Foperations",{"title":38,"path":39,"stem":40},"Policies","\u002Fcompany\u002Fpolicies","1.company\u002Fpolicies",{"title":42,"path":43,"stem":44},"Product","\u002Fcompany\u002Fproduct","1.company\u002Fproduct",{"title":46,"path":47,"stem":48},"Security","\u002Fcompany\u002Fsecurity","1.company\u002Fsecurity",false,{"title":51,"path":52,"stem":53,"children":54,"page":49},"People Ops","\u002Fpeople-ops","2.people-ops",[55,59,63,67,71],{"title":56,"path":57,"stem":58},"Compensation","\u002Fpeople-ops\u002Fcompensation","2.people-ops\u002Fcompensation",{"title":60,"path":61,"stem":62},"Education","\u002Fpeople-ops\u002Feducation","2.people-ops\u002Feducation",{"title":64,"path":65,"stem":66},"Expenses","\u002Fpeople-ops\u002Fexpenses","2.people-ops\u002Fexpenses",{"title":68,"path":69,"stem":70},"Holiday & Leave","\u002Fpeople-ops\u002Fleave","2.people-ops\u002Fleave",{"title":72,"path":73,"stem":74},"Onboarding","\u002Fpeople-ops\u002Fonboarding","2.people-ops\u002Fonboarding",{"title":76,"path":77,"stem":78,"children":79,"page":49},"Engineering","\u002Fengineering","3.engineering",[80,84,88,92,96,117,121,125,129],{"title":81,"path":82,"stem":83},"Development Setup","\u002Fengineering\u002Fdevelopment-setup","3.engineering\u002F1.development-setup",{"title":85,"path":86,"stem":87},"Contributing","\u002Fengineering\u002Fcontributing","3.engineering\u002Fcontributing",{"title":89,"path":90,"stem":91},"Production Database","\u002Fengineering\u002Fdatabase-connection","3.engineering\u002Fdatabase-connection",{"title":93,"path":94,"stem":95},"Deployment","\u002Fengineering\u002Fdeployment","3.engineering\u002Fdeployment",{"title":97,"path":98,"stem":99,"children":100,"page":49},"Github","\u002Fengineering\u002Fgithub","3.engineering\u002Fgithub",[101,105,109,113],{"title":102,"path":103,"stem":104},"Packages","\u002Fengineering\u002Fgithub\u002Fpackages","3.engineering\u002Fgithub\u002Fpackages",{"title":106,"path":107,"stem":108},"Personal Access Token","\u002Fengineering\u002Fgithub\u002Fpersonal-access-token","3.engineering\u002Fgithub\u002Fpersonal-access-token",{"title":110,"path":111,"stem":112},"Troubleshooting","\u002Fengineering\u002Fgithub\u002Ftroubleshooting","3.engineering\u002Fgithub\u002Ftroubleshooting",{"title":114,"path":115,"stem":116},"Workflows","\u002Fengineering\u002Fgithub\u002Fworkflows","3.engineering\u002Fgithub\u002Fworkflows",{"title":118,"path":119,"stem":120},"Platform Ops","\u002Fengineering\u002Fplatform-ops","3.engineering\u002Fplatform-ops",{"title":122,"path":123,"stem":124},"Project Management","\u002Fengineering\u002Fproject-management","3.engineering\u002Fproject-management",{"title":126,"path":127,"stem":128},"Releases","\u002Fengineering\u002Frelease","3.engineering\u002Frelease",{"title":130,"path":131,"stem":132},"Tools","\u002Fengineering\u002Ftools","3.engineering\u002Ftools",{"title":134,"path":135,"stem":136,"children":137,"page":49},"Design","\u002Fdesign","4.design",[138,142,146],{"title":139,"path":140,"stem":141},"Branding","\u002Fdesign\u002Fbranding","4.design\u002Fbranding",{"title":143,"path":144,"stem":145},"Design Thinking","\u002Fdesign\u002Fdesign-thinking","4.design\u002Fdesign-thinking",{"title":130,"path":147,"stem":148},"\u002Fdesign\u002Ftools","4.design\u002Ftools",{"title":150,"path":151,"stem":152,"children":153,"page":49},"Sales","\u002Fsales","4.sales",[154,158],{"title":155,"path":156,"stem":157},"Customer Onboarding","\u002Fsales\u002Fonboarding","4.sales\u002Fonboarding",{"title":159,"path":160,"stem":161},"Sales Tools","\u002Fsales\u002Ftools","4.sales\u002Ftools",{"title":163,"path":164,"stem":165,"children":166,"page":49},"Marketing","\u002Fmarketing","5.marketing",[167],{"title":168,"path":169,"stem":170},"Messaging","\u002Fmarketing\u002Fmessaging","5.marketing\u002Fmessaging",{"title":172,"path":173,"stem":174,"children":175,"page":49},"Data Ops","\u002Fdata-ops","6.data-ops",[176,185,189,193,197,201],{"title":177,"path":178,"stem":179,"children":180,"page":49},"Capability Exchange","\u002Fdata-ops\u002Fcapability-exchange","6.data-ops\u002FCapability Exchange",[181],{"title":182,"path":183,"stem":184},"Leaderboard Calculation","\u002Fdata-ops\u002Fcapability-exchange\u002Fleaderboard-calculation","6.data-ops\u002FCapability Exchange\u002Fleaderboard-calculation",{"title":186,"path":187,"stem":188},"Account Portal (CAS)","\u002Fdata-ops\u002Faccount-portal","6.data-ops\u002Faccount-portal",{"title":190,"path":191,"stem":192},"Adding Products","\u002Fdata-ops\u002Faddin-products","6.data-ops\u002Faddin-products",{"title":194,"path":195,"stem":196},"Adding Vendors","\u002Fdata-ops\u002Fadding-vendors","6.data-ops\u002Fadding-vendors",{"title":198,"path":199,"stem":200},"Message Queues","\u002Fdata-ops\u002Fmessage-queues","6.data-ops\u002Fmessage-queues",{"title":202,"path":203,"stem":204},"Refreshing Vendors","\u002Fdata-ops\u002Frefreshing-vendors","6.data-ops\u002Frefreshing-vendors",{"title":206,"path":207,"stem":208},"Glossary","\u002Fglossary","glossary",{"id":210,"title":93,"body":211,"description":423,"extension":424,"links":425,"meta":426,"navigation":427,"path":94,"seo":428,"stem":95,"__hash__":429},"docs\u002F3.engineering\u002Fdeployment.md",{"type":212,"value":213,"toc":412},"minimark",[214,219,223,227,230,235,243,258,263,270,359,363,367,375,378,382,389,396,400,408],[215,216,218],"h2",{"id":217},"creating-new-tenants","Creating New Tenants",[215,220,222],{"id":221},"posthog","PostHog",[224,225,226],"p",{},"PostHog is used to track user interaction with the platform.",[224,228,229],{},"We have separate projects for \"Development\" and \"Production\" environments. All customer ESProfiler tenants published data into the \"Production\" project. When a new tenant is spun up, data tracking will automatically be enabled.",[231,232,234],"h3",{"id":233},"classifying-tenant","Classifying Tenant",[224,236,237,238,242],{},"In PostHog it is possible to define a \"Transformation\". These parse incoming events and can modify or append the data before being committed to the PostHog data set. We use this to add a new ",[239,240,241],"code",{},"esp_tenant"," field, which makes it easier us to to then filter the analytics by a particular tenant.",[224,244,245,246,249,250,257],{},"To view Transformations in PostHog you can navigate to ",[239,247,248],{},"Data Management > Transformations",". You will then find the ",[251,252,256],"a",{"href":253,"rel":254},"https:\u002F\u002Feu.posthog.com\u002Fproject\u002F118187\u002Ffunctions\u002F019c329b-17d8-0000-b0f5-366b81ec9426",[255],"nofollow","Classify Tenant"," transformation, which you can click to view the details of.",[259,260,262],"h4",{"id":261},"adding-new-tenants","Adding New Tenants",[224,264,265,266,269],{},"To add your new tenant to the classification, click \"Edit Source Code\", then add a new ",[239,267,268],{},"if"," statement for your new tenant:",[271,272,277],"pre",{"className":273,"code":274,"language":275,"meta":276,"style":276},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","if (event.properties.$session_entry_host == '\u003Ctenant>.own.esprofiler.com') {\n    returnEvent.properties.esp_tenant := 'Company Name' \n}\n","js","",[239,278,279,322,353],{"__ignoreMap":276},[280,281,284,287,291,295,298,300,303,306,309,313,316,319],"span",{"class":282,"line":283},"line",1,[280,285,268],{"class":286},"s7zQu",[280,288,290],{"class":289},"sTEyZ"," (event",[280,292,294],{"class":293},"sMK4o",".",[280,296,297],{"class":289},"properties",[280,299,294],{"class":293},[280,301,302],{"class":289},"$session_entry_host ",[280,304,305],{"class":293},"==",[280,307,308],{"class":293}," '",[280,310,312],{"class":311},"sfazB","\u003Ctenant>.own.esprofiler.com",[280,314,315],{"class":293},"'",[280,317,318],{"class":289},") ",[280,320,321],{"class":293},"{\n",[280,323,325,328,330,332,334,336,340,343,345,348,350],{"class":282,"line":324},2,[280,326,327],{"class":289},"    returnEvent",[280,329,294],{"class":293},[280,331,297],{"class":289},[280,333,294],{"class":293},[280,335,241],{"class":289},[280,337,339],{"class":338},"swJcz"," :",[280,341,342],{"class":293},"=",[280,344,308],{"class":293},[280,346,347],{"class":311},"Company Name",[280,349,315],{"class":293},[280,351,352],{"class":338}," \n",[280,354,356],{"class":282,"line":355},3,[280,357,358],{"class":293},"}\n",[215,360,362],{"id":361},"tracking-deployment-status","Tracking Deployment Status",[231,364,366],{"id":365},"tenants","Tenants",[224,368,369,370,294],{},"In order to track the deployments of tenants, we currenlty use the AWS Console for ",[251,371,374],{"href":372,"rel":373},"https:\u002F\u002Feu-west-2.console.aws.amazon.com\u002Fecs\u002Fv2\u002Fclusters\u002Fesp-customer\u002Fservices?region=eu-west-2",[255],"ECS",[224,376,377],{},"Currently, there is Spring Actuator on the platform application so we don't have an uptime robot like we do for central services.",[231,379,381],{"id":380},"services","Services",[224,383,384,385,294],{},"In order to track the deployments of central services, we currenlty use the AWS Console for ",[251,386,374],{"href":387,"rel":388},"https:\u002F\u002Feu-west-2.console.aws.amazon.com\u002Fecs\u002Fv2\u002Fclusters\u002Fesp-infrastructure\u002Fservices?region=eu-west-2",[255],[224,390,391,392,395],{},"We also have an uptime robot that monitors the central services and will notify the team on Slack on the ",[239,393,394],{},"ops-production"," channel if there are any issues with the services.",[231,397,399],{"id":398},"release-status","Release Status",[224,401,402,403,294],{},"We also have a page on CPS Manager that tracks the version of both active tenants and services. You can find it here: ",[251,404,407],{"href":405,"rel":406},"https:\u002F\u002Fapi.esprofiler.com\u002Fcps\u002Fmanage\u002Frelease-status",[255],"CPS Manager",[409,410,411],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":276,"searchDepth":324,"depth":324,"links":413},[414,415,418],{"id":217,"depth":324,"text":218},{"id":221,"depth":324,"text":222,"children":416},[417],{"id":233,"depth":355,"text":234},{"id":361,"depth":324,"text":362,"children":419},[420,421,422],{"id":365,"depth":355,"text":366},{"id":380,"depth":355,"text":381},{"id":398,"depth":355,"text":399},"A comprehensive overview of the deployment process for new ESProfiler tenants","md",null,{},true,{"title":93,"description":423},"zCh-idUVctmegFRzHMmnnqOlLq5LrkJUFHfdd16JfLE",[431,433],{"title":89,"path":90,"stem":91,"description":432,"children":-1},"Accessing the production database in rollback situations.",{"title":102,"path":103,"stem":104,"description":276,"children":-1},1778263960964]