Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Analytics para Devs
Search
Marcus Ortense
April 28, 2020
99
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Analytics para Devs
Marcus Ortense
April 28, 2020
More Decks by Marcus Ortense
See All by Marcus Ortense
Concrete on Beer JavaScript - Offline first
ortense
0
140
Natura Meet Up PWA - Offline first
ortense
0
78
Escrevendo javascript testável
ortense
1
170
Serverless
ortense
0
87
Talk - let, const & arrow functions
ortense
0
71
Talk - JavaScript Isomórfico
ortense
0
86
Desenvolvimento vs Conversão
ortense
2
110
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Designing Experiences People Love
moore
143
24k
Amusing Abliteration
ianozsvald
1
320
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
Side Projects
sachag
456
43k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
Tell your own story through comics
letsgokoyo
1
1.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
Everyday Curiosity
cassininazir
0
340
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Transcript
None
None
analytics para devs
1 DE SETEMBRO DE 2013
Por onde começar?
None
None
instalação <script async src="https://www.googletagmanager.com/gtag/js?id=UA-000000-X"> </script> <script> window.dataLayer = window.dataLayer ||
[]; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-000000-X'); </script>
instalação <script async src="https://www.googletagmanager.com/gtag/js?id=UA-000000-X"> </script> <script> window.dataLayer = window.dataLayer ||
[]; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-000000-X'); </script>
instalação <script async src="https://www.googletagmanager.com/gtag/js?id=UA-000000-X"> </script> <script> window.dataLayer = window.dataLayer ||
[]; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-000000-X'); </script>
instalação <script async src="https://www.googletagmanager.com/gtag/js?id=UA-000000-X"> </script> <script> window.dataLayer = window.dataLayer ||
[]; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-000000-X'); </script>
<script> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true; j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-00000'); </script>
instalação
<script> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true; j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-00000'); </script>
instalação
relatórios built-in
tempo real
None
navegadores
None
sistemas operacionais
None
resoluções de tela
None
regiões
None
dispositivos
None
visualizações & eventos
visualização de página gtag('config', 'UA-000000-X')
gtag('config', 'UA-000000-X', { page_title: 'homepage', page_path: '/home', }) visualização de
página
gtag('config', 'UA-000000-X') gtag('config', 'UA-111111-Y', { page_title: 'homepage', page_path: '/home', })
visualização de página
gtag('event', 'play', { event_category: 'videos', event_label: 'video promocional', }) eventos
gtag('event', 'auto play', { event_category: 'videos', event_label: 'video promocional', non_interaction:
true, }) eventos
tem mais?
avaliando tempo
user timing
gtag('event', 'timing_complete', { name: 'load', value: performance.now(), event_category: 'JS Dependencies',
}) carregamento
gtag('event', 'timing_complete', { name: 'load', value: performance.now(), event_category: 'JS Dependencies',
}) carregamento
carregamento
None
None
export function getUserByID(id) { return axios .get(`/users/${id})}`) .then(response => response.data)
} http request
export function getUserByID(id) { return axios .get(`/users/${id})}`) .then(response => response.data)
} http request
axios.interceptors.request.use((config) => { config.startTime = Date.now() return config }, error
=> Promise.reject(error)) http request
client.interceptors.response.use((response) => { const successfulRequestTime = Date.now() - response.config.startTime return
response }, (error) => { const failedRequestTime = Date.now() - error.config.startTime return Promise.reject(error) }) http request
client.interceptors.response.use((response) => { const successfulRequestTime = Date.now() - response.config.startTime return
response }, (error) => { const failedRequestTime = Date.now() - error.config.startTime return Promise.reject(error) }) http request
gtag('event', 'timing_complete', { name: response.config.url, value: successfulRequestTime, event_category : 'api
request', event_label: 'success', }) http request
gtag('event', 'timing_complete', { name: error.config.url, value: failedRequestTime, event_category : 'api
request', event_label: 'fail', }) http request
request time
None
exceções & crashs
gtag('event', 'exception', { description: 'exception', fatal: false, }) coletando erros
window.addEventListener('error', (event) => { gtag('event', 'exception', { description: `${event.error.name}: ${event.error.message}`,
fatal: false, }) }) coletando erros
None
coletando erros
coletando erros
coletando erros
coletando erros
measurement protocol
http api
debug mode
consumindo dados
serviços google
extraindo via api
poderoso não é mesmo?
MUITO OBRIGADO!