SlideShare a Scribd company logo
1 of 36
Download to read offline
S T Y L I G H T . C O M
Helping Data Teams with
Puppet
S T Y L I G H T . C O M
S E R G I I K H O M E N K O , D A T A S C I E N T I S T ,
S E R G I I . K H O M E N K O @ S T Y L I G H T . C O M , @ l c 0 d 3 r
W h o ? W h a t ? W h y ?
S e t t i n g u p y o u r B I w i t h p u p p e t .
S m a l l t i p s a n d t r i c k s
P u p p e t y o u r r a n k i n g
A G E N D A
Data scientist at one of the biggest fashion communities,
STYLIGHT. Data analysis and visualization hobbyist.
Speaker at Berlin Buzzwords 2014, ApacheCon Europe 2014
Founder and speaker at Munich Golang UG, Munich Tableau UG.
Speaker at Munich UseR Group, Munich Search UG, Munich
Quantified Self UG.
Sergii Khomenko
Milos Radovanovic
Passionate about DevOps stuff:
1. microservices
2. docker
3. 12 factor apps
4. continuous integration/deployment
L i v e i n 1 2 c o u n t r i e s
STYLIGHT – international community
S T Y L I G H T . C O M
Setting up your BI with
puppet.
T a b l e a u - r e p o r t i n g a n d a d - h o c s
P y t h o n / T a l e n d E T L t o o l s
Minimum Viable BI
R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E
Minimum Viable BI
We use Puppet for *nix servers and can’t merge
with Windows machine
Standalone mode for Puppet
– easier to start and develop
– windows machines are separated from *nix ones
R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E
Minimum Viable BI
cd c:folderwithour-bi
git pull origin master
IF %ERRORLEVEL% NEQ 0 set
context=GIT_FAILURE && goto error_handler
puppet apply --modulepath=puppetmodules puppetwin-
node-name.net.pp
IF %ERRORLEVEL% NEQ 0 set
context=PUPPET_FAILURE && goto error_handler
goto end
R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E
Minimum Viable BI
:error_handler
echo entering error_handler
EVENTCREATE /T ERROR /L APPLICATION /SO
Puppet_Scheduler /ID 100 /D "EXECUTION FAILED
REASON %context%"
goto end
:end
echo DONE
Minimum Viable BI
Standalone mode for Puppet
– configuration is totally separated
– custom modules --modulepath=puppetmodules
–  Github hosted configuration
–  Error handling via Windows event log
R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E
Minimum Viable BI
node  'ʹwin-­‐‑node-­‐‑name.net'ʹ  {	
	
        scheduled_task  {'ʹrefresh-­‐‑1'ʹ:	
            ensure        =>  present,	
            enabled      =>  true,	
            command      =>  'ʹC:pathtoyourscript.bat'ʹ,	
            arguments  =>  'ʹsome  args  'ʹ,	
            
S C H E D U L I N G I S I M P O R T A N T
Minimum Viable BI
            user  =>  'ʹyour-­‐‑user'ʹ,	
            password  =>  'ʹyour-­‐‑password'ʹ,	
	
            trigger      =>  {	
                schedule      =>  daily,	
                start_time  =>  'ʹ06:00'ʹ,	
            }	
        }	
S C H E D U L I N G I S I M P O R T A N T
Minimum Viable BI
# Can't use the Puppet's scheduled_task as it does not
support to run the schedule task every 5 minutes.
https://github.com/sdliangzhihua/windows-puppet-
example/blob/master/manifest.pp#L68
S Y N C M Y C O N F I G U R A T I O N E V E R Y 1 5 M I N
Minimum Viable BI
$cmd = 'C:Windowssystem32cmd.exe'
$job_name = 'sync_code'
exec { 'CreateCodeSyncScheduledTask':
command => "${cmd} /C schtasks /create /sc
MINUTE /mo 15 /tn ${job_name} /tr C:your
puppet.bat /ru administrator /f",
onlyif => ["${cmd} /C schtasks /query /tn ${job_name}
& if errorlevel 1 (exit /b 0) else exit /b 1"],
S Y N C M Y C O N F I G U R A T I O N E V E R Y 1 5 M I N
S T Y L I G H T . C O M
Small tips and tricks
do  not  repeat  yourself  and  other  tricks
Minimum Viable BI
node  'ʹwin-­‐‑node-­‐‑name.net'ʹ  {	
	
        scheduled_task  {'ʹrefresh-­‐‑1'ʹ:	
            ensure        =>  present,	
            enabled      =>  true,	
            command      =>  'ʹC:pathtoyourscript.bat'ʹ,	
            arguments  =>  'ʹsome  args  'ʹ,	
            
S C H E D U L I N G I S I M P O R T A N T
Small tips and tricks
class  job_scheduler(	
        $ensure                        =  $job_scheduler::params::ensure,	
        $enabled                    =  $job_scheduler::params::enabled,	
        $user                                =  $job_scheduler::params::user,	
        $password              =  $job_scheduler::params::password,	
        $working_dir    =  $job_scheduler::params::working_dir,	
)inherits  job_scheduler::params{	
	
}
Small tips and tricks
define  job_scheduler::job	
(	
        $arguments              ='ʹtableau_adobe.py'ʹ,	
        $command                  ='ʹc:Py27-­‐‑32python.exe'ʹ,	
        $schedule_type      ='ʹdaily'ʹ,	
        $start_time            ='ʹ08:15'ʹ,	
        $day_of_week          ='ʹevery'ʹ,	
)	
{
Small tips and tricks
define  job_scheduler::tableau_job	
(	
        $arguments              ='ʹdefault-­‐‑tableau'ʹ,	
        $command                  ='ʹc:foldertableau.bat'ʹ,	
        $schedule_type      ='ʹdaily'ʹ,	
        $start_time            ='ʹ21:00'ʹ,	
        $day_of_week          ='ʹevery'ʹ,	
)	
{
Small tips and tricks
# Params with default values for the tableau job
# that might be changed in a job definition
#
# 1. $arguments ='default-argument',
# 2. $command ='c:folderscript.bat',
# 3. $schedule_type ='daily',
# 4. $start_time ='21:00',
# 5. $day_of_week ='every',
####################
Small tips and tricks
job_scheduler::tableau_job {
’some job': start_time => '01:00', arguments => ’args';
’default refresh-1': start_time => '06:00';
'default refresh-2': start_time => '10:00';
'weekly update': start_time => '03:35', arguments =>
'weekly-update', schedule_type => weekly, day_of_week =>
['mon'];
}
Small tips and tricks
job_scheduler::redshift_job  {	
            'ʹRS  tagged  products'ʹ:                  start_time  =>  'ʹ00:40'ʹ,  params  =>  
'ʹ..datasourcessomething.tds'ʹ;	
            'ʹRS  another  job'ʹ:  start_time  =>  'ʹ00:50'ʹ,  params  =>  'ʹ..
datasourceselse.tds'ʹ
S T Y L I G H T . C O M
Puppet your ranking
Lean,  flexible,  powerful
A r a n k i n g i s a r e l a t i o n s h i p
b e t w e e n a s e t o f i t e m s s u c h t h a t ,
f o r a n y t w o i t e m s , t h e f i r s t i s
e i t h e r ' r a n k e d h i g h e r t h a n ' ,
' r a n k e d l o w e r t h a n ' o r ' r a n k e d
e q u a l t o ' t h e s e c o n d .
Ranking specifics:
•  Seasonal influence
•  Trends
•  Cold start of new countries, shops
•  Multiple dimensions of ranking model
Requirements:
•  Decreasing time to implement new ranking
model
•  Keeping working infrastructure alive
•  A/B testing without changing entire
infrastructure
•  Performance level - “still fast” and
“transparent”
Lean approach to Ranking
M u l t i p l e p o i n t s o f e v a l u a t i o n
Jboss Solr-loadbalancer nginx Solr
nginx Solr
nginx Solr
Common search infrastructure
Updated infrastructure
Jboss Solr-loadbalancer nginx Solr
nginx Solr
nginx Solr
Jboss Solr-loadbalancer nginx Solr
Front-end loadbalancer
q = +brand:adidas shop:monshowroom^3
q = +adidas monshowroom
defType = dismax
qf = brand shop^3
sort = user_ratings desc, score desc
qq = adidas
q = {!boost b=$b defType=dismax v=$qq}
b = prod(popularity, clicks)
Lean approach to Ranking
Lean approach to Ranking
solr0x.node.company.pp
include nginx
nginx::config { "solr_dev": }
nginx::solr-ranking { "delta2":
urls => [
“/some.thing?
gender=women&brand=2271&tag=1161&tag=877&tag=468",
"/some.thing?
gender=men&brand=11235&tag=10203&tag=10299&tag=10326"
],
Lean approach to Ranking
<% urls.each do |url| -%>
if ($args ~* <% if url['gender'] > 0 -%>gender_id%3A<
%= url['gender'] %>.*<% end -%><% url['tags'].each
do |tag| -%>tag_id%3A<%= tag %>.*<% end -%><%
if url['brand'] > 0 -%>brand_id%3A%28<%=
url['brand'] %>%29<% end -%>) {
set $orig $args;
set $args "q={!boost+b=%24b+defType=dismax+v=
%24qq}&qq=id:*";
rewrite ^(.*)$ "$1?$orig" break;
}
<% end -%>
nginx / templates / conf / solr-rewrites.conf.erb
Stages to evaluate a model:
•  R ranking model
•  Independent Solr-node
1.  For internal use-cases
2.  Testing for some of pages
3.  A/B roll out for % of users
•  Production roll out
Lean approach to Ranking
M u l t i p l e p o i n t s o f e v a l u a t i o n
Thanks for your
attention!
S T Y L I G H T . C O M
Sergii Khomenko
Data Scientist
STYLIGHT GmbH
sergii.khomenko@stylight.com
@lc0d3r
Nymphenburger Straße 86
80636 Munich, Germany

More Related Content

What's hot

What's hot (19)

WordPress in 30 minutes
WordPress in 30 minutesWordPress in 30 minutes
WordPress in 30 minutes
 
API Pain Points (PHPNE)
API Pain Points (PHPNE)API Pain Points (PHPNE)
API Pain Points (PHPNE)
 
Five things for you - Yahoo developer offers
Five things for you - Yahoo developer offersFive things for you - Yahoo developer offers
Five things for you - Yahoo developer offers
 
Fluent Refactoring (Cascadia Ruby Conf 2013)
Fluent Refactoring (Cascadia Ruby Conf 2013)Fluent Refactoring (Cascadia Ruby Conf 2013)
Fluent Refactoring (Cascadia Ruby Conf 2013)
 
Session8
Session8Session8
Session8
 
Api pain points
Api pain pointsApi pain points
Api pain points
 
Django tips & tricks
Django tips & tricksDjango tips & tricks
Django tips & tricks
 
Wsomdp
WsomdpWsomdp
Wsomdp
 
How to Build a Web App (for Non-Programmers)
How to Build a Web App (for Non-Programmers)How to Build a Web App (for Non-Programmers)
How to Build a Web App (for Non-Programmers)
 
Noah Brier: How to build web apps
Noah Brier: How to build web appsNoah Brier: How to build web apps
Noah Brier: How to build web apps
 
WordPressでIoTをはじめよう
WordPressでIoTをはじめようWordPressでIoTをはじめよう
WordPressでIoTをはじめよう
 
Playing With The Web
Playing With The WebPlaying With The Web
Playing With The Web
 
Bacon.js — Gérer efficacement les flux de données en Javascript
Bacon.js — Gérer efficacement les flux de données en JavascriptBacon.js — Gérer efficacement les flux de données en Javascript
Bacon.js — Gérer efficacement les flux de données en Javascript
 
DBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たちDBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たち
 
Select * from internet
Select * from internetSelect * from internet
Select * from internet
 
Command
CommandCommand
Command
 
Cheap frontend tricks
Cheap frontend tricksCheap frontend tricks
Cheap frontend tricks
 
HTML5 & The Open Web - at Nackademin
HTML5 & The Open Web -  at NackademinHTML5 & The Open Web -  at Nackademin
HTML5 & The Open Web - at Nackademin
 
PHP an intro -1
PHP an intro -1PHP an intro -1
PHP an intro -1
 

Viewers also liked

Informe sostenibilidad 09
Informe sostenibilidad 09Informe sostenibilidad 09
Informe sostenibilidad 09pozos12
 
Metodología de desarrollo multimedia
Metodología de desarrollo multimediaMetodología de desarrollo multimedia
Metodología de desarrollo multimediaElvin Hernandez
 
13. ve tu a saber hoja de vida
13. ve tu a saber hoja de vida13. ve tu a saber hoja de vida
13. ve tu a saber hoja de vidaJulián Carreño
 
Liquid Opportunities: Barcelona International Sailing Essentials (ENG)
Liquid Opportunities: Barcelona International Sailing Essentials (ENG)Liquid Opportunities: Barcelona International Sailing Essentials (ENG)
Liquid Opportunities: Barcelona International Sailing Essentials (ENG)Laia Tutzo
 
Mada ralph paglia recruit screen hire
Mada ralph paglia recruit screen hireMada ralph paglia recruit screen hire
Mada ralph paglia recruit screen hireRalph Paglia
 
Nitrogen Cycling Processes Across an Oyster Aquaculture Chronosequence
Nitrogen Cycling Processes Across an Oyster Aquaculture ChronosequenceNitrogen Cycling Processes Across an Oyster Aquaculture Chronosequence
Nitrogen Cycling Processes Across an Oyster Aquaculture Chronosequenceriseagrant
 
Guerra Fria 2
Guerra Fria 2Guerra Fria 2
Guerra Fria 2san_kart
 
Jobs And Economic Development2011
Jobs And Economic Development2011Jobs And Economic Development2011
Jobs And Economic Development2011Gary Crossley
 
Disey03
Disey03Disey03
Disey03urir9
 
Como diferenciar tu tienda online de la competencia a través del SEO
Como diferenciar tu tienda online de la competencia a través del SEOComo diferenciar tu tienda online de la competencia a través del SEO
Como diferenciar tu tienda online de la competencia a través del SEOOptimizedStores
 
Tarea Específica Nº 2
Tarea Específica Nº 2Tarea Específica Nº 2
Tarea Específica Nº 2Fe R M
 
La Commune de Cugand (85)
La Commune de Cugand (85)La Commune de Cugand (85)
La Commune de Cugand (85)Alexandra855
 
Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)
Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)
Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)kseifeunj
 

Viewers also liked (20)

Informe sostenibilidad 09
Informe sostenibilidad 09Informe sostenibilidad 09
Informe sostenibilidad 09
 
Mobil Texnologiyalar
Mobil TexnologiyalarMobil Texnologiyalar
Mobil Texnologiyalar
 
Metodología de desarrollo multimedia
Metodología de desarrollo multimediaMetodología de desarrollo multimedia
Metodología de desarrollo multimedia
 
6th MuscleTech Workshop 2014
6th MuscleTech Workshop 20146th MuscleTech Workshop 2014
6th MuscleTech Workshop 2014
 
13. ve tu a saber hoja de vida
13. ve tu a saber hoja de vida13. ve tu a saber hoja de vida
13. ve tu a saber hoja de vida
 
Liquid Opportunities: Barcelona International Sailing Essentials (ENG)
Liquid Opportunities: Barcelona International Sailing Essentials (ENG)Liquid Opportunities: Barcelona International Sailing Essentials (ENG)
Liquid Opportunities: Barcelona International Sailing Essentials (ENG)
 
Mada ralph paglia recruit screen hire
Mada ralph paglia recruit screen hireMada ralph paglia recruit screen hire
Mada ralph paglia recruit screen hire
 
Nitrogen Cycling Processes Across an Oyster Aquaculture Chronosequence
Nitrogen Cycling Processes Across an Oyster Aquaculture ChronosequenceNitrogen Cycling Processes Across an Oyster Aquaculture Chronosequence
Nitrogen Cycling Processes Across an Oyster Aquaculture Chronosequence
 
Guerra Fria 2
Guerra Fria 2Guerra Fria 2
Guerra Fria 2
 
Jobs And Economic Development2011
Jobs And Economic Development2011Jobs And Economic Development2011
Jobs And Economic Development2011
 
Biohort Katalog 2011
Biohort Katalog 2011Biohort Katalog 2011
Biohort Katalog 2011
 
Desayuno ii alcorcon concilia
Desayuno ii alcorcon conciliaDesayuno ii alcorcon concilia
Desayuno ii alcorcon concilia
 
Disey03
Disey03Disey03
Disey03
 
Practica8
Practica8Practica8
Practica8
 
Como diferenciar tu tienda online de la competencia a través del SEO
Como diferenciar tu tienda online de la competencia a través del SEOComo diferenciar tu tienda online de la competencia a través del SEO
Como diferenciar tu tienda online de la competencia a través del SEO
 
Física 2 trabajo primer parcial
Física 2 trabajo primer parcialFísica 2 trabajo primer parcial
Física 2 trabajo primer parcial
 
Diccionario pictorico
Diccionario pictoricoDiccionario pictorico
Diccionario pictorico
 
Tarea Específica Nº 2
Tarea Específica Nº 2Tarea Específica Nº 2
Tarea Específica Nº 2
 
La Commune de Cugand (85)
La Commune de Cugand (85)La Commune de Cugand (85)
La Commune de Cugand (85)
 
Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)
Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)
Form pendaftaran OLIMPIADE EKSYAR KSEI FE UNJ (SELEB 7)
 

Similar to Puppet Camp London 2015 - Helping Data Teams with Puppet

Py conkr 20150829_docker-python
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-pythonEric Ahn
 
Py conkr 20150829_docker-python
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-pythonEric Ahn
 
Testing TYPO3 Applications
Testing TYPO3 ApplicationsTesting TYPO3 Applications
Testing TYPO3 ApplicationsAndré Wuttig
 
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010singingfish
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.jsSarah Drasner
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeWim Godden
 
PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner Neotys
 
Perl web frameworks
Perl web frameworksPerl web frameworks
Perl web frameworksdiego_k
 
Curscatalyst
CurscatalystCurscatalyst
CurscatalystKar Juan
 
Reduce, Reuse, Refactor
Reduce, Reuse, RefactorReduce, Reuse, Refactor
Reduce, Reuse, Refactorcklosowski
 
Performance Instrumentation for PL/SQL: When, Why, How
Performance Instrumentation for PL/SQL: When, Why, HowPerformance Instrumentation for PL/SQL: When, Why, How
Performance Instrumentation for PL/SQL: When, Why, HowKaren Morton
 
PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!Blanca Mancilla
 
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...doughellmann
 
Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)andrewnacin
 
Nagios Conference 2014 - Rodrigo Faria - Developing your Plugin
Nagios Conference 2014 - Rodrigo Faria - Developing your PluginNagios Conference 2014 - Rodrigo Faria - Developing your Plugin
Nagios Conference 2014 - Rodrigo Faria - Developing your PluginNagios
 
Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013Valeriy Kravchuk
 
SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)Robert Swisher
 
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsAlessandro Molina
 

Similar to Puppet Camp London 2015 - Helping Data Teams with Puppet (20)

Py conkr 20150829_docker-python
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-python
 
Py conkr 20150829_docker-python
Py conkr 20150829_docker-pythonPy conkr 20150829_docker-python
Py conkr 20150829_docker-python
 
Testing TYPO3 Applications
Testing TYPO3 ApplicationsTesting TYPO3 Applications
Testing TYPO3 Applications
 
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
Don't RTFM, WTFM - Open Source Documentation - German Perl Workshop 2010
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.js
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the code
 
PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner PAC 2020 Santorin - Andreas Grabner
PAC 2020 Santorin - Andreas Grabner
 
Perl web frameworks
Perl web frameworksPerl web frameworks
Perl web frameworks
 
Curscatalyst
CurscatalystCurscatalyst
Curscatalyst
 
Reduce, Reuse, Refactor
Reduce, Reuse, RefactorReduce, Reuse, Refactor
Reduce, Reuse, Refactor
 
Performance Instrumentation for PL/SQL: When, Why, How
Performance Instrumentation for PL/SQL: When, Why, HowPerformance Instrumentation for PL/SQL: When, Why, How
Performance Instrumentation for PL/SQL: When, Why, How
 
PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!
 
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...How I Built a Power Debugger Out of the Standard Library and Things I Found o...
How I Built a Power Debugger Out of the Standard Library and Things I Found o...
 
Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)
 
Method::Signatures
Method::SignaturesMethod::Signatures
Method::Signatures
 
SOLID Ruby, SOLID Rails
SOLID Ruby, SOLID RailsSOLID Ruby, SOLID Rails
SOLID Ruby, SOLID Rails
 
Nagios Conference 2014 - Rodrigo Faria - Developing your Plugin
Nagios Conference 2014 - Rodrigo Faria - Developing your PluginNagios Conference 2014 - Rodrigo Faria - Developing your Plugin
Nagios Conference 2014 - Rodrigo Faria - Developing your Plugin
 
Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013
 
SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)SDPHP - Percona Toolkit (It's Basically Magic)
SDPHP - Percona Toolkit (It's Basically Magic)
 
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
 

More from Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyamlPuppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)Puppet
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscodePuppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twentiesPuppet
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codePuppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approachPuppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationPuppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliancePuppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowPuppet
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppetPuppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkPuppet
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping groundPuppet
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy SoftwarePuppet
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User GroupPuppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsPuppet
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyPuppet
 

More from Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Recently uploaded

Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineeringssuserb3a23b
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 

Recently uploaded (20)

Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineering
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 

Puppet Camp London 2015 - Helping Data Teams with Puppet

  • 1. S T Y L I G H T . C O M Helping Data Teams with Puppet S T Y L I G H T . C O M S E R G I I K H O M E N K O , D A T A S C I E N T I S T , S E R G I I . K H O M E N K O @ S T Y L I G H T . C O M , @ l c 0 d 3 r
  • 2. W h o ? W h a t ? W h y ? S e t t i n g u p y o u r B I w i t h p u p p e t . S m a l l t i p s a n d t r i c k s P u p p e t y o u r r a n k i n g A G E N D A
  • 3. Data scientist at one of the biggest fashion communities, STYLIGHT. Data analysis and visualization hobbyist. Speaker at Berlin Buzzwords 2014, ApacheCon Europe 2014 Founder and speaker at Munich Golang UG, Munich Tableau UG. Speaker at Munich UseR Group, Munich Search UG, Munich Quantified Self UG. Sergii Khomenko Milos Radovanovic Passionate about DevOps stuff: 1. microservices 2. docker 3. 12 factor apps 4. continuous integration/deployment
  • 4.
  • 5.
  • 6. L i v e i n 1 2 c o u n t r i e s STYLIGHT – international community
  • 7. S T Y L I G H T . C O M Setting up your BI with puppet.
  • 8. T a b l e a u - r e p o r t i n g a n d a d - h o c s P y t h o n / T a l e n d E T L t o o l s Minimum Viable BI
  • 9. R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E Minimum Viable BI We use Puppet for *nix servers and can’t merge with Windows machine Standalone mode for Puppet – easier to start and develop – windows machines are separated from *nix ones
  • 10. R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E Minimum Viable BI cd c:folderwithour-bi git pull origin master IF %ERRORLEVEL% NEQ 0 set context=GIT_FAILURE && goto error_handler puppet apply --modulepath=puppetmodules puppetwin- node-name.net.pp IF %ERRORLEVEL% NEQ 0 set context=PUPPET_FAILURE && goto error_handler goto end
  • 11. R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E Minimum Viable BI :error_handler echo entering error_handler EVENTCREATE /T ERROR /L APPLICATION /SO Puppet_Scheduler /ID 100 /D "EXECUTION FAILED REASON %context%" goto end :end echo DONE
  • 12. Minimum Viable BI Standalone mode for Puppet – configuration is totally separated – custom modules --modulepath=puppetmodules –  Github hosted configuration –  Error handling via Windows event log R U N N I N G P U P P E T I N A S T A N D A L O N E M O D E
  • 13. Minimum Viable BI node  'ʹwin-­‐‑node-­‐‑name.net'ʹ  {        scheduled_task  {'ʹrefresh-­‐‑1'ʹ:            ensure        =>  present,            enabled      =>  true,            command      =>  'ʹC:pathtoyourscript.bat'ʹ,            arguments  =>  'ʹsome  args  'ʹ,             S C H E D U L I N G I S I M P O R T A N T
  • 14. Minimum Viable BI            user  =>  'ʹyour-­‐‑user'ʹ,            password  =>  'ʹyour-­‐‑password'ʹ,            trigger      =>  {                schedule      =>  daily,                start_time  =>  'ʹ06:00'ʹ,            }        } S C H E D U L I N G I S I M P O R T A N T
  • 15. Minimum Viable BI # Can't use the Puppet's scheduled_task as it does not support to run the schedule task every 5 minutes. https://github.com/sdliangzhihua/windows-puppet- example/blob/master/manifest.pp#L68 S Y N C M Y C O N F I G U R A T I O N E V E R Y 1 5 M I N
  • 16. Minimum Viable BI $cmd = 'C:Windowssystem32cmd.exe' $job_name = 'sync_code' exec { 'CreateCodeSyncScheduledTask': command => "${cmd} /C schtasks /create /sc MINUTE /mo 15 /tn ${job_name} /tr C:your puppet.bat /ru administrator /f", onlyif => ["${cmd} /C schtasks /query /tn ${job_name} & if errorlevel 1 (exit /b 0) else exit /b 1"], S Y N C M Y C O N F I G U R A T I O N E V E R Y 1 5 M I N
  • 17. S T Y L I G H T . C O M Small tips and tricks do  not  repeat  yourself  and  other  tricks
  • 18. Minimum Viable BI node  'ʹwin-­‐‑node-­‐‑name.net'ʹ  {        scheduled_task  {'ʹrefresh-­‐‑1'ʹ:            ensure        =>  present,            enabled      =>  true,            command      =>  'ʹC:pathtoyourscript.bat'ʹ,            arguments  =>  'ʹsome  args  'ʹ,             S C H E D U L I N G I S I M P O R T A N T
  • 19. Small tips and tricks class  job_scheduler(        $ensure                        =  $job_scheduler::params::ensure,        $enabled                    =  $job_scheduler::params::enabled,        $user                                =  $job_scheduler::params::user,        $password              =  $job_scheduler::params::password,        $working_dir    =  $job_scheduler::params::working_dir, )inherits  job_scheduler::params{ }
  • 20. Small tips and tricks define  job_scheduler::job (        $arguments              ='ʹtableau_adobe.py'ʹ,        $command                  ='ʹc:Py27-­‐‑32python.exe'ʹ,        $schedule_type      ='ʹdaily'ʹ,        $start_time            ='ʹ08:15'ʹ,        $day_of_week          ='ʹevery'ʹ, ) {
  • 21. Small tips and tricks define  job_scheduler::tableau_job (        $arguments              ='ʹdefault-­‐‑tableau'ʹ,        $command                  ='ʹc:foldertableau.bat'ʹ,        $schedule_type      ='ʹdaily'ʹ,        $start_time            ='ʹ21:00'ʹ,        $day_of_week          ='ʹevery'ʹ, ) {
  • 22. Small tips and tricks # Params with default values for the tableau job # that might be changed in a job definition # # 1. $arguments ='default-argument', # 2. $command ='c:folderscript.bat', # 3. $schedule_type ='daily', # 4. $start_time ='21:00', # 5. $day_of_week ='every', ####################
  • 23. Small tips and tricks job_scheduler::tableau_job { ’some job': start_time => '01:00', arguments => ’args'; ’default refresh-1': start_time => '06:00'; 'default refresh-2': start_time => '10:00'; 'weekly update': start_time => '03:35', arguments => 'weekly-update', schedule_type => weekly, day_of_week => ['mon']; }
  • 24. Small tips and tricks job_scheduler::redshift_job  {            'ʹRS  tagged  products'ʹ:                  start_time  =>  'ʹ00:40'ʹ,  params  =>   'ʹ..datasourcessomething.tds'ʹ;            'ʹRS  another  job'ʹ:  start_time  =>  'ʹ00:50'ʹ,  params  =>  'ʹ.. datasourceselse.tds'ʹ
  • 25. S T Y L I G H T . C O M Puppet your ranking Lean,  flexible,  powerful
  • 26. A r a n k i n g i s a r e l a t i o n s h i p b e t w e e n a s e t o f i t e m s s u c h t h a t , f o r a n y t w o i t e m s , t h e f i r s t i s e i t h e r ' r a n k e d h i g h e r t h a n ' , ' r a n k e d l o w e r t h a n ' o r ' r a n k e d e q u a l t o ' t h e s e c o n d .
  • 27. Ranking specifics: •  Seasonal influence •  Trends •  Cold start of new countries, shops •  Multiple dimensions of ranking model
  • 28. Requirements: •  Decreasing time to implement new ranking model •  Keeping working infrastructure alive •  A/B testing without changing entire infrastructure •  Performance level - “still fast” and “transparent” Lean approach to Ranking M u l t i p l e p o i n t s o f e v a l u a t i o n
  • 29. Jboss Solr-loadbalancer nginx Solr nginx Solr nginx Solr Common search infrastructure
  • 30. Updated infrastructure Jboss Solr-loadbalancer nginx Solr nginx Solr nginx Solr Jboss Solr-loadbalancer nginx Solr Front-end loadbalancer
  • 31. q = +brand:adidas shop:monshowroom^3 q = +adidas monshowroom defType = dismax qf = brand shop^3 sort = user_ratings desc, score desc qq = adidas q = {!boost b=$b defType=dismax v=$qq} b = prod(popularity, clicks) Lean approach to Ranking
  • 32. Lean approach to Ranking solr0x.node.company.pp include nginx nginx::config { "solr_dev": } nginx::solr-ranking { "delta2": urls => [ “/some.thing? gender=women&brand=2271&tag=1161&tag=877&tag=468", "/some.thing? gender=men&brand=11235&tag=10203&tag=10299&tag=10326" ],
  • 33. Lean approach to Ranking <% urls.each do |url| -%> if ($args ~* <% if url['gender'] > 0 -%>gender_id%3A< %= url['gender'] %>.*<% end -%><% url['tags'].each do |tag| -%>tag_id%3A<%= tag %>.*<% end -%><% if url['brand'] > 0 -%>brand_id%3A%28<%= url['brand'] %>%29<% end -%>) { set $orig $args; set $args "q={!boost+b=%24b+defType=dismax+v= %24qq}&qq=id:*"; rewrite ^(.*)$ "$1?$orig" break; } <% end -%> nginx / templates / conf / solr-rewrites.conf.erb
  • 34. Stages to evaluate a model: •  R ranking model •  Independent Solr-node 1.  For internal use-cases 2.  Testing for some of pages 3.  A/B roll out for % of users •  Production roll out Lean approach to Ranking M u l t i p l e p o i n t s o f e v a l u a t i o n
  • 36. S T Y L I G H T . C O M Sergii Khomenko Data Scientist STYLIGHT GmbH sergii.khomenko@stylight.com @lc0d3r Nymphenburger Straße 86 80636 Munich, Germany