-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathanalise_logs.py
More file actions
141 lines (90 loc) · 3.11 KB
/
Copy pathanalise_logs.py
File metadata and controls
141 lines (90 loc) · 3.11 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/env python2
# encoding: utf-8
# Importar psycopg2 para conectar-se ao Database
import psycopg2
# Aplicar uma função para chamada posterior do Database
DBNAME = "news"
def executar_db(query):
"""Conectar-se ao banco de dados, e executar a pesquisa
retornando os resultados"""
try:
db = psycopg2.connect('dbname=' + DBNAME)
except psycopg2.Error as e:
print("Unable to connect to the database")
print(e.pgerror)
print(e.diag.message_detail)
sys.exit(1)
c = db.cursor()
c.execute(query)
rows = c.fetchall()
db.close()
return rows
# Perguntas e Respostas
def artigos_mais_visualizados():
# Construindo a query
query = """
select articles.title, count(log.path) as num
from log join articles
on log.path = CONCAT('/article/', articles.slug) where
log.status = '200 OK'
group by articles.title
order by num Desc limit 3;
"""
# Executando a query
results = executar_db(query)
# Função para imprimir os resultados de 'def artigos_mais_visualizados()':
print('Os três artigos mais populares de todos os tempos são: \n')
count = 1
for i in results:
number = '(' + str(count) + ') "'
title = i[0]
views = '" com ' + str(i[1]) + " visualizações"
print(number + title + views)
count += 1
def autores_mais_populares():
# Construindo a query
query = """
select authors.name, count(log.path) as num
from articles join authors
on articles.author = authors.id
join log on log.path like CONCAT('/article/', articles.slug) where
log.status = '200 OK'
group by authors.name
order by num Desc limit 3;
"""
# Executando a query
results = executar_db(query)
# Função para imprimir os resultados de 'def autores_mais_populares()':
print('Os autores mais populares de todos os tempos são: \n')
count = 1
for i in results:
print('(' + str(count) + ') ' + i[0] + ' com ' + str(i[1]) +
" visualizações")
count += 1
def dias_com_mais_de_1_por_cento_de_erro():
# Construindo a query
query = """
select to_char(time::date, 'Month DD,YYYY'),
(count(case when status != '200 OK' then 1 end)*100)::float/
count(*) as num from log
group by time::date
order by num desc limit 1;
"""
# Executando a query
results = executar_db(query)
# Função para imprimir os resultados de:
# 'def dias_com_mais_de_1_por_cento_de_erro()':
print('Em quais dias mais de 1% das requisições resultaram'
'em erros? \n')
for i in results:
date = i[0]
errors = str(round(i[1], 1)) + "%" + " erros"
print(date + " -- " + errors)
# Imprimindo resultados no terminal
print('Resultado da Pesquisa:')
print('____________________________________')
artigos_mais_visualizados()
print('____________________________________')
autores_mais_populares()
print('____________________________________')
dias_com_mais_de_1_por_cento_de_erro()