panda-motd 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2fd6e0a2e577fc5da802286b310b10ba6a6a6156e18018e8752e7d6721eb722
|
4
|
+
data.tar.gz: 276d6515eb28126be934ed82c3cf128ca509150325b1ce06b5bd8db95f81c0d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d7ba00265bd290738b77b3493e0ada6cc4bd42f13dd8dfdcd69fdf1eb1143396299bab7da17ffa597d4507d0979043511642eafcde06f8a62208274a1ef389b
|
7
|
+
data.tar.gz: 1790ef2779623a5c8d9cf00cb7b56d20b4130ee52d8894bc2545a7b7ff1ceeb7e5c775382c961d6123050fddc6de88ee24dc179dbb1487b65df6e760e227dd4d
|
@@ -70,7 +70,8 @@ class Filesystems
|
|
70
70
|
total_ticks = name_col_size_with_padding + 18
|
71
71
|
used_ticks = (total_ticks * (percentage_used.to_f / 100)).round
|
72
72
|
|
73
|
-
result += " [#{('=' * used_ticks).send(percentage_color(percentage_used))}#{('=' * (total_ticks - used_ticks)).light_black}]
|
73
|
+
result += " [#{('=' * used_ticks).send(percentage_color(percentage_used))}#{('=' * (total_ticks - used_ticks)).light_black}]"
|
74
|
+
result += "\n" unless filesystem == @results.last
|
74
75
|
end
|
75
76
|
|
76
77
|
return result
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
class LastLogin
|
4
|
+
attr_reader :name, :errors, :results
|
5
|
+
|
6
|
+
def initialize(motd)
|
7
|
+
@name = 'last_login'
|
8
|
+
@motd = motd
|
9
|
+
@config = motd.config.component_config(@name)
|
10
|
+
@errors = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def process
|
14
|
+
@users = @config['users']
|
15
|
+
@results = parse_last_logins(@users)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
result = "Last Login:\n"
|
20
|
+
|
21
|
+
@results.each do |user, logins|
|
22
|
+
result += " #{user}:\n"
|
23
|
+
location_string_size = logins.map { |l| l[:location].length }.max
|
24
|
+
logins.each do |login|
|
25
|
+
location_part = login[:location].ljust(location_string_size, ' ')
|
26
|
+
start_part = login[:time_start].strftime('%m/%d/%Y %I:%M%p')
|
27
|
+
|
28
|
+
end_part = if login[:time_end].is_a? String # still logged in text
|
29
|
+
login[:time_end].green
|
30
|
+
else
|
31
|
+
"#{((login[:time_end] - login[:time_start]) * 24 * 60).to_i} minutes"
|
32
|
+
end
|
33
|
+
|
34
|
+
result += " from #{location_part} at #{start_part} (#{end_part})\n"
|
35
|
+
end
|
36
|
+
result += ' no logins found for user.' if logins.empty?
|
37
|
+
end
|
38
|
+
|
39
|
+
return result
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def parse_last_logins(users)
|
45
|
+
all_logins = {}
|
46
|
+
users.each_with_index do |(username, num_logins), i|
|
47
|
+
user_logins = []
|
48
|
+
cmd_result = `last --time-format=iso #{username}`
|
49
|
+
cmd_result.split("\n").each do |entry|
|
50
|
+
next unless entry.start_with? username
|
51
|
+
data = entry.split(/(?:\s{2,})|(?:\s-\s)/)
|
52
|
+
|
53
|
+
time_end = data[4] == 'still logged in' ? data[4] : DateTime.parse(data[4])
|
54
|
+
|
55
|
+
user_logins << {
|
56
|
+
username: username,
|
57
|
+
location: data[2],
|
58
|
+
time_start: DateTime.parse(data[3]),
|
59
|
+
time_end: time_end
|
60
|
+
}
|
61
|
+
|
62
|
+
break if user_logins.count >= num_logins
|
63
|
+
end
|
64
|
+
|
65
|
+
all_logins[username.to_sym] = user_logins
|
66
|
+
end
|
67
|
+
|
68
|
+
return all_logins
|
69
|
+
end
|
70
|
+
end
|
data/lib/panda_motd/config.rb
CHANGED
@@ -27,7 +27,8 @@ class Config
|
|
27
27
|
service_status: ServiceStatus,
|
28
28
|
uptime: Uptime,
|
29
29
|
ssl_certificates: SSLCertificates,
|
30
|
-
filesystems: Filesystems
|
30
|
+
filesystems: Filesystems,
|
31
|
+
last_login: LastLogin
|
31
32
|
}
|
32
33
|
end
|
33
34
|
|
@@ -38,5 +39,6 @@ class Config
|
|
38
39
|
|
39
40
|
def load_config(file_path)
|
40
41
|
@config = YAML.safe_load(File.read(file_path))
|
42
|
+
@config['components'] = [] if @config['components'].nil?
|
41
43
|
end
|
42
44
|
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
components:
|
7
7
|
#####
|
8
8
|
# ASCII Text Art
|
9
|
-
# Generates ASCII pictures of strings.
|
9
|
+
# Generates ASCII pictures of strings. Currently only shows the hostname.
|
10
10
|
#
|
11
11
|
# Settings
|
12
12
|
# font: The figlet font to render the text with. All supported fonts
|
@@ -87,3 +87,20 @@ components:
|
|
87
87
|
# filesystems:
|
88
88
|
# /dev/sda1: Ubuntu
|
89
89
|
# /dev/sdc1: Data
|
90
|
+
|
91
|
+
|
92
|
+
#####
|
93
|
+
# Last Login
|
94
|
+
# Displays previous login information for users.
|
95
|
+
#
|
96
|
+
# Settings
|
97
|
+
# users: A list of user names which you are interested in receiving login
|
98
|
+
# information about. The key is the username, and the value is the number
|
99
|
+
# of recent logins you'd like to display.
|
100
|
+
#####
|
101
|
+
|
102
|
+
# last_login:
|
103
|
+
# enabled: true
|
104
|
+
# users:
|
105
|
+
# taylor: 2
|
106
|
+
# stoyan: 1
|
data/lib/panda_motd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: panda-motd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taylor Thurlow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: artii
|
@@ -190,6 +190,7 @@ files:
|
|
190
190
|
- lib/panda_motd/component_error.rb
|
191
191
|
- lib/panda_motd/components/ascii_text_art.rb
|
192
192
|
- lib/panda_motd/components/filesystems.rb
|
193
|
+
- lib/panda_motd/components/last_login.rb
|
193
194
|
- lib/panda_motd/components/service_status.rb
|
194
195
|
- lib/panda_motd/components/ssl_certificates.rb
|
195
196
|
- lib/panda_motd/components/uptime.rb
|