FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
netdata/python.d/squid.chart.py at master · unixapple/netdata · GitHub
unixapple
/
netdata
Public
forked from
netdata/netdata
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
netdata
/
python.d
/
squid.chart.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
121 lines (104 loc) · 3.99 KB
Breadcrumbs
netdata
/
python.d
/
squid.chart.py
Copy path
File metadata and controls
121 lines (104 loc) · 3.99 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
# -*- coding: utf-8 -*-
# Description: squid netdata python.d module
# Author: Pawel Krupa (paulfantom)
from
base
import
SocketService
import
select
# default module values (can be overridden per job in `config`)
# update_every = 2
priority
=
60000
retries
=
60
# charts order (can be overridden if you want less charts, or different order)
ORDER
=
[
'clients_net'
,
'clients_requests'
,
'servers_net'
,
'servers_requests'
]
CHARTS
=
{
'clients_net'
: {
'options'
: [
None
,
"Squid Client Bandwidth"
,
"kilobits/s"
,
"clients"
,
"squid.clients_net"
,
"area"
],
'lines'
: [
[
"client_http_kbytes_in"
,
"in"
,
"incremental"
,
8
,
1
],
[
"client_http_kbytes_out"
,
"out"
,
"incremental"
,
-
8
,
1
],
[
"client_http_hit_kbytes_out"
,
"hits"
,
"incremental"
,
-
8
,
1
]
]},
'clients_requests'
: {
'options'
: [
None
,
"Squid Client Requests"
,
"requests/s"
,
"clients"
,
"squid.clients_requests"
,
'line'
],
'lines'
: [
[
"client_http_requests"
,
"requests"
,
"incremental"
],
[
"client_http_hits"
,
"hits"
,
"incremental"
],
[
"client_http_errors"
,
"errors"
,
"incremental"
,
-
1
,
1
]
]},
'servers_net'
: {
'options'
: [
None
,
"Squid Server Bandwidth"
,
"kilobits/s"
,
"servers"
,
"squid.servers_net"
,
"area"
],
'lines'
: [
[
"server_all_kbytes_in"
,
"in"
,
"incremental"
,
8
,
1
],
[
"server_all_kbytes_out"
,
"out"
,
"incremental"
,
-
8
,
1
]
]},
'servers_requests'
: {
'options'
: [
None
,
"Squid Server Requests"
,
"requests/s"
,
"servers"
,
"squid.servers_requests"
,
'line'
],
'lines'
: [
[
"server_all_requests"
,
"requests"
,
"incremental"
],
[
"server_all_errors"
,
"errors"
,
"incremental"
,
-
1
,
1
]
]}
}
class
Service
(
SocketService
):
def
__init__
(
self
,
configuration
=
None
,
name
=
None
):
SocketService
.
__init__
(
self
,
configuration
=
configuration
,
name
=
name
)
self
.
_keep_alive
=
True
self
.
request
=
""
self
.
host
=
"localhost"
self
.
port
=
3128
self
.
order
=
ORDER
self
.
definitions
=
CHARTS
def
_get_data
(
self
):
"""
Get data via http request
:return: dict
"""
response
=
self
.
_get_raw_data
()
data
=
{}
try
:
raw
=
""
for
tmp
in
response
.
split
(
'
\r
\n
'
):
if
tmp
.
startswith
(
"sample_time"
):
raw
=
tmp
break
if
raw
.
startswith
(
'<'
):
self
.
error
(
"invalid data received"
)
return
None
for
row
in
raw
.
split
(
'
\n
'
):
if
row
.
startswith
((
"client"
,
"server.all"
)):
tmp
=
row
.
split
(
"="
)
data
[
tmp
[
0
].
replace
(
'.'
,
'_'
).
strip
(
' '
)]
=
int
(
tmp
[
1
])
except
(
ValueError
,
AttributeError
,
TypeError
):
self
.
error
(
"invalid data received"
)
return
None
if
len
(
data
)
==
0
:
self
.
error
(
"no data received"
)
return
None
else
:
return
data
def
_check_raw_data
(
self
,
data
):
header
=
data
[:
1024
].
lower
()
if
"connection: keep-alive"
in
header
:
self
.
_keep_alive
=
True
else
:
self
.
_keep_alive
=
False
if
data
[
-
7
:]
==
"
\r
\n
0
\r
\n
\r
\n
"
and
"transfer-encoding: chunked"
in
header
:
# HTTP/1.1 response
self
.
debug
(
"received full response from squid"
)
return
True
self
.
debug
(
"waiting more data from squid"
)
return
False
def
check
(
self
):
"""
Parse essential configuration, autodetect squid configuration (if needed), and check if data is available
:return: boolean
"""
self
.
_parse_config
()
# format request
req
=
self
.
request
.
decode
()
if
not
req
.
startswith
(
"GET"
):
req
=
"GET "
+
req
if
not
req
.
endswith
(
" HTTP/1.1
\r
\n
\r
\n
"
):
req
+=
" HTTP/1.1
\r
\n
\r
\n
"
self
.
request
=
req
.
encode
()
if
self
.
_get_data
()
is
not
None
:
return
True
else
:
return
False
Back
|
FazBrowse Home
|
New Git URL