Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mailinabox
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
mailinabox
Commits
2d509734
Commit
2d509734
authored
Aug 21, 2014
by
Joshua Tauberer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move the package update check into the system status checks
parent
294d19e0
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
50 additions
and
9 deletions
+50
-9
daemon.py
management/daemon.py
+5
-8
status_checks.py
management/status_checks.py
+45
-1
No files found.
management/daemon.py
View file @
2d509734
...
...
@@ -210,14 +210,11 @@ def system_status():
@
app
.
route
(
'/system/updates'
)
@
authorized_personnel_only
def
show_updates
():
utils
.
shell
(
"check_call"
,
[
"/usr/bin/apt-get"
,
"-qq"
,
"update"
])
simulated_install
=
utils
.
shell
(
"check_output"
,
[
"/usr/bin/apt-get"
,
"-qq"
,
"-s"
,
"upgrade"
])
pkgs
=
[]
for
line
in
simulated_install
.
split
(
'
\n
'
):
if
re
.
match
(
r'^Conf .*'
,
line
):
continue
# remove these lines, not informative
line
=
re
.
sub
(
r'^Inst (.*) \[(.*)\] \((\S*).*'
,
r'Updated Package Available: \1 (\3)'
,
line
)
# make these lines prettier
pkgs
.
append
(
line
)
return
"
\n
"
.
join
(
pkgs
)
from
status_checks
import
list_apt_updates
return
""
.
join
(
"
%
s (
%
s)
\n
"
%
(
p
[
"package"
],
p
[
"version"
])
for
p
in
list_apt_updates
())
@
app
.
route
(
'/system/update-packages'
,
methods
=
[
"POST"
])
@
authorized_personnel_only
...
...
management/status_checks.py
View file @
2d509734
...
...
@@ -6,7 +6,7 @@
__ALL__
=
[
'check_certificate'
]
import
os
,
os
.
path
,
re
,
subprocess
import
os
,
os
.
path
,
re
,
subprocess
,
datetime
import
dns.reversename
,
dns
.
resolver
...
...
@@ -36,6 +36,17 @@ def run_system_checks(env):
else
:
env
[
'out'
]
.
print_ok
(
"SSH disallows password-based login."
)
# Check for any software package updates.
pkgs
=
list_apt_updates
()
if
os
.
path
.
exists
(
"/var/run/reboot-required"
):
env
[
'out'
]
.
print_error
(
"System updates have been installed and a reboot of the machine is required."
)
elif
len
(
pkgs
)
==
0
:
env
[
'out'
]
.
print_ok
(
"System software is up to date."
)
else
:
env
[
'out'
]
.
print_error
(
"There are
%
d software packages that can be updated."
%
len
(
pkgs
))
for
p
in
pkgs
:
env
[
'out'
]
.
print_line
(
"
%
s (
%
s)"
%
(
p
[
"package"
],
p
[
"version"
]))
# Check that the administrator alias exists since that's where all
# admin email is automatically directed.
check_alias_exists
(
"administrator@"
+
env
[
'PRIMARY_HOSTNAME'
],
env
)
...
...
@@ -433,6 +444,39 @@ def check_certificate(domain, ssl_certificate, ssl_private_key):
else
:
return
verifyoutput
.
strip
()
_apt_updates
=
None
def
list_apt_updates
():
# See if we have this information cached recently.
# Keep the information for 8 hours.
global
_apt_updates
if
_apt_updates
is
not
None
and
_apt_updates
[
0
]
>
datetime
.
datetime
.
now
()
-
datetime
.
timedelta
(
hours
=
8
):
return
_apt_updates
[
1
]
# Run apt-get update to refresh package list.
shell
(
"check_call"
,
[
"/usr/bin/apt-get"
,
"-qq"
,
"update"
])
# Run apt-get upgrade in simulate mode to get a list of what
# it would do.
simulated_install
=
shell
(
"check_output"
,
[
"/usr/bin/apt-get"
,
"-qq"
,
"-s"
,
"upgrade"
])
pkgs
=
[]
for
line
in
simulated_install
.
split
(
'
\n
'
):
if
line
.
strip
()
==
""
:
continue
if
re
.
match
(
r'^Conf .*'
,
line
):
# remove these lines, not informative
continue
m
=
re
.
match
(
r'^Inst (.*) \[(.*)\] \((\S*)'
,
line
)
if
m
:
pkgs
.
append
({
"package"
:
m
.
group
(
1
),
"version"
:
m
.
group
(
3
),
"current_version"
:
m
.
group
(
2
)
})
else
:
pkgs
.
append
({
"package"
:
"["
+
line
+
"]"
,
"version"
:
""
,
"current_version"
:
""
})
# Cache for future requests.
_apt_updates
=
(
datetime
.
datetime
.
now
(),
pkgs
)
return
pkgs
try
:
terminal_columns
=
int
(
shell
(
'check_output'
,
[
'stty'
,
'size'
])
.
split
()[
1
])
except
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment