systemdy 0.3.1 → 0.4.0
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 +4 -4
- data/CHANGELOG.md +25 -0
- data/Gemfile.lock +1 -1
- data/README.md +53 -4
- data/lib/systemdy/service.rb +53 -7
- data/lib/systemdy/utility/formatter.rb +15 -1
- data/lib/systemdy/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1544343d2a581add0354d499edbd139097f169be6dfc17e5ef4c310af3f27121
|
|
4
|
+
data.tar.gz: b6e96d3e254f09b8f3f53b7e3ead30f6d4290eb7a28832743552cd0dbd98dbe7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ada7db214a2832e363ae2b0c4b9a64049adfd1e2a1652e490676da479c8889758343f7501d0b5f4de1733ce7cc17b3772a3bb4362ddac20eb8e6b1c3e4b2845d
|
|
7
|
+
data.tar.gz: 649e589fee12a0fdf97cf03c9a7ad5697e59191f08471bec85e2ad6e3e83fa41aafbc27e1b7590a37d5c89150c0ba489fc9b20c310570f4b9fbaf49697a2681f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
## [0.4.0] - 2022-11-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
|
|
5
|
+
- Systemdy::Utility::Formatter return_an_array_from class method for convert a complex string into array with custom splitter
|
|
6
|
+
- Systemdy::Service port method for return service port if available
|
|
7
|
+
- Systemdy::Service protocol method for return service protocol if available
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Logic for Systemd::Utility::Formatter return_an_array_from_system_command class method
|
|
12
|
+
|
|
13
|
+
## [0.3.2] - 2022-10-21
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- documentation_uri in gemspec
|
|
18
|
+
|
|
19
|
+
## [0.3.1] - 2022-10-21
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Documentation syntax for Systemdy::Utility::Formatter.remove_newline_from_system_command class method
|
|
24
|
+
- documentation_uri in gemspec
|
|
25
|
+
|
|
1
26
|
## [0.3.0] - 2022-10-21
|
|
2
27
|
|
|
3
28
|
### Added
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -31,7 +31,9 @@ If your goal is to develop software to quickly manage systemd services or journa
|
|
|
31
31
|
* [Check if the provided service is enabled](#check-if-the-provided-service-is-enabled)
|
|
32
32
|
* [Check if the provided service is active](#check-if-the-provided-service-is-active)
|
|
33
33
|
* [Check the current status of the provided service](#check-the-current-status-of-the-provided-service)
|
|
34
|
-
* [Display all the properties for the provided service](#
|
|
34
|
+
* [Display all the properties for the provided service](#display-all-the-properties-for-the-provided-service)
|
|
35
|
+
* [Get service port](#get-service-port)
|
|
36
|
+
* [Get service protocol](#get-service-protocol)
|
|
35
37
|
* [Start the service](#start-the-service)
|
|
36
38
|
* [Restart the service](#restart-the-service)
|
|
37
39
|
* [Stop the service](#stop-the-service)
|
|
@@ -70,9 +72,11 @@ And then execute:
|
|
|
70
72
|
Or install it yourself as:
|
|
71
73
|
|
|
72
74
|
$ gem install systemdy
|
|
75
|
+
|
|
73
76
|
## Dependencies
|
|
74
77
|
|
|
75
78
|
The only dependecy you need is [systemd](http://www.freedesktop.org/wiki/Software/systemdy/) installed on your system (specifically libsystemd or the older libsystemd-journal) in order to use the gem. Currently the gem support systemd 249 or higher.
|
|
79
|
+
|
|
76
80
|
## Usage
|
|
77
81
|
|
|
78
82
|
After installing the gem, the first step is to require it:
|
|
@@ -80,6 +84,7 @@ After installing the gem, the first step is to require it:
|
|
|
80
84
|
```ruby
|
|
81
85
|
require 'systemdy'
|
|
82
86
|
```
|
|
87
|
+
|
|
83
88
|
## Manage services
|
|
84
89
|
|
|
85
90
|
The first goal of this gem is to manage a systemd's service with minimal effort.
|
|
@@ -148,9 +153,11 @@ Once executed, this method return an hash with all the essential service's infor
|
|
|
148
153
|
"InactiveExitTimestamp"=>"Thu 2022-09-29 17:13:07 CEST"
|
|
149
154
|
}
|
|
150
155
|
```
|
|
156
|
+
|
|
151
157
|
### Display all the properties for the provided service
|
|
152
158
|
|
|
153
159
|
For check all the properties of the service
|
|
160
|
+
|
|
154
161
|
```ruby
|
|
155
162
|
my_postgresql_service.properties
|
|
156
163
|
```
|
|
@@ -170,6 +177,44 @@ To extract the value of a specific property
|
|
|
170
177
|
my_postgresql_service.properties["MemorySwapMax"]
|
|
171
178
|
```
|
|
172
179
|
|
|
180
|
+
### Get service port
|
|
181
|
+
|
|
182
|
+
For retrieve a service port
|
|
183
|
+
|
|
184
|
+
```ruby
|
|
185
|
+
my_postgresql_service.port
|
|
186
|
+
```
|
|
187
|
+
Once executed, this method return the provided service port:
|
|
188
|
+
|
|
189
|
+
```ruby
|
|
190
|
+
"5432"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
if the provided service has no available port, this method return a message like this:
|
|
194
|
+
|
|
195
|
+
```ruby
|
|
196
|
+
"postgresql.service has no port available"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Get service protocol
|
|
200
|
+
|
|
201
|
+
For retrieve a service protocol
|
|
202
|
+
|
|
203
|
+
```ruby
|
|
204
|
+
my_postgresql_service.protocol
|
|
205
|
+
```
|
|
206
|
+
Once executed, this method return the provided service port:
|
|
207
|
+
|
|
208
|
+
```ruby
|
|
209
|
+
"tcp"
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
if the provided service has no available protocol, this method return a message like this:
|
|
213
|
+
|
|
214
|
+
```ruby
|
|
215
|
+
"postgresql.service has no protocol available"
|
|
216
|
+
```
|
|
217
|
+
|
|
173
218
|
### Start the service
|
|
174
219
|
|
|
175
220
|
For start the service
|
|
@@ -218,12 +263,14 @@ For mask the service
|
|
|
218
263
|
```ruby
|
|
219
264
|
my_postgresql_service.mask
|
|
220
265
|
```
|
|
266
|
+
|
|
221
267
|
### Unmask the service
|
|
222
268
|
|
|
223
269
|
For unmask the service
|
|
224
270
|
```ruby
|
|
225
271
|
my_postgresql_service.unmask
|
|
226
272
|
```
|
|
273
|
+
|
|
227
274
|
## Bonus tip: execute systemctl commands without prompt the password
|
|
228
275
|
|
|
229
276
|
The methods **start**, **restart**, **stop**, **enable**, **disable**, **reload**, **mask** and **unmask** detect non-root users and automatically execute the methods with sudo.
|
|
@@ -266,6 +313,7 @@ Type 'exit' on your terminal as follows:
|
|
|
266
313
|
root@my-machine:~# exit
|
|
267
314
|
```
|
|
268
315
|
Exit from root session and you are ready to go! :sunglasses:
|
|
316
|
+
|
|
269
317
|
## Manage Journalctl logs
|
|
270
318
|
|
|
271
319
|
The second goal of this gem is to provide a set of useful methods for retrieving journalctl log data.
|
|
@@ -535,6 +583,7 @@ If the passed arguments not match anything the method return an array with a mes
|
|
|
535
583
|
```ruby
|
|
536
584
|
["-- No entries --"]
|
|
537
585
|
```
|
|
586
|
+
|
|
538
587
|
## Contributing
|
|
539
588
|
|
|
540
589
|
We :heart: pull requests from everyone.
|
|
@@ -629,9 +678,9 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
|
629
678
|
|
|
630
679
|
## Useful links and resources
|
|
631
680
|
|
|
632
|
-
|
|
633
|
-
|
|
681
|
+
- An interesting article on [how to run sudo commands without password](https://www.linuxshelltips.com/run-sudo-commands-without-password/)
|
|
682
|
+
- The official Systemd documentation for [time specification](https://www.freedesktop.org/software/systemd/man/systemd.time.html)
|
|
634
683
|
|
|
635
684
|
## Acknowledgements
|
|
636
685
|
|
|
637
|
-
|
|
686
|
+
- Thanks to [@colstrom](https://github.com/colstrom) and his [systemized](https://github.com/colstrom/systemized) for the great inspiration
|
data/lib/systemdy/service.rb
CHANGED
|
@@ -7,17 +7,23 @@ module Systemdy
|
|
|
7
7
|
# extend Forwardable standard's library module for delegate a specified method to a designated object
|
|
8
8
|
extend Forwardable
|
|
9
9
|
|
|
10
|
+
# service look up information command
|
|
11
|
+
INFO_LOOKUP_COMMAND = "getent services"
|
|
12
|
+
|
|
13
|
+
# list of essential information on a provided service
|
|
14
|
+
LIST_OF_ESSENTIAL_INFO_LOOKUP = %w( port protocol )
|
|
15
|
+
|
|
10
16
|
# list of supported actions on a provided service
|
|
11
|
-
LIST_OF_ACTIONS
|
|
17
|
+
LIST_OF_ACTIONS = %w( start restart stop enable disable reload mask unmask )
|
|
12
18
|
|
|
13
19
|
# list of supported statuses on a provided service
|
|
14
|
-
LIST_OF_STATUSES
|
|
20
|
+
LIST_OF_STATUSES = %w( enabled active )
|
|
15
21
|
|
|
16
22
|
# list of status properties on a provided service when status command is called
|
|
17
|
-
LIST_OF_STATUS_PROPERTIES
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
LIST_OF_STATUS_PROPERTIES = %w( Id Description ExecMainPID LoadState ActiveState FragmentPath
|
|
24
|
+
ActiveEnterTimestamp InactiveEnterTimestamp ActiveExitTimestamp
|
|
25
|
+
InactiveExitTimestamp
|
|
26
|
+
)
|
|
21
27
|
|
|
22
28
|
attr_reader :command, :name
|
|
23
29
|
|
|
@@ -34,6 +40,8 @@ module Systemdy
|
|
|
34
40
|
|
|
35
41
|
# delegate return_an_array_from_system_command method to Systemdy::Utility::Formatter class contained in Systemdy/utility/formatter.rb
|
|
36
42
|
def_delegator Systemdy::Utility::Formatter, :return_an_array_from_system_command
|
|
43
|
+
# delegate return_an_array_from method to Systemdy::Utility::Formatter class contained in Systemdy/utility/formatter.rb
|
|
44
|
+
def_delegator Systemdy::Utility::Formatter, :return_an_array_from
|
|
37
45
|
# delegate remove_newline_from_system_command to Systemdy::Utility::Formatter class contained in Systemdy/utility/formatter.rb
|
|
38
46
|
def_delegator Systemdy::Utility::Formatter, :remove_newline_from_system_command
|
|
39
47
|
# delegate render_message method to Systemdy::Utility::MessageDisplayer class contained in Systemdy/utility/message_displayer.rb
|
|
@@ -51,6 +59,30 @@ module Systemdy
|
|
|
51
59
|
def exist?
|
|
52
60
|
check_if_a_service_exist(name) # class method contained in Systemdy/utility/validator.rb
|
|
53
61
|
end
|
|
62
|
+
|
|
63
|
+
# create dynamically methods based on LIST_OF_ESSENTIAL_INFO_LOOKUP constant
|
|
64
|
+
# @!method port
|
|
65
|
+
# return the available +port+ of the service
|
|
66
|
+
# @example get the service port
|
|
67
|
+
# my_postgresql_service.port #=> "5432"
|
|
68
|
+
# @note This method is generated with use of metaprogramming techniques
|
|
69
|
+
# @todo This method return an error message when there are no port available
|
|
70
|
+
#
|
|
71
|
+
# @!method protocol
|
|
72
|
+
# return the available +protocol+ of the service
|
|
73
|
+
# @example restart a service
|
|
74
|
+
# my_postgresql_service.protocol #=> "tcp"
|
|
75
|
+
# @note This method is generated with use of metaprogramming techniques
|
|
76
|
+
# @todo This method return an error message when there are no protocol available
|
|
77
|
+
#
|
|
78
|
+
LIST_OF_ESSENTIAL_INFO_LOOKUP.each_with_index do |info, index|
|
|
79
|
+
define_method info do
|
|
80
|
+
return default_error_message() unless exist?
|
|
81
|
+
essential_info = return_an_array_from(`#{INFO_LOOKUP_COMMAND} #{name}`, argument_splitter: ' ')
|
|
82
|
+
return info_lookup_error_message(info) if essential_info.nil?
|
|
83
|
+
return_an_array_from(essential_info[1], argument_splitter: '/')[index]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
54
86
|
|
|
55
87
|
# create dynamically methods based on LIST_OF_ACTIONS constant
|
|
56
88
|
# @!method start
|
|
@@ -182,11 +214,25 @@ module Systemdy
|
|
|
182
214
|
render_message("Unit #{name}.service could not be found.") # class method contained in Systemdy/utility/message_displayer.rb
|
|
183
215
|
end
|
|
184
216
|
|
|
217
|
+
# method to show a message when a service has no port or protocols available
|
|
218
|
+
# @return [String] the info lookup error message
|
|
219
|
+
# @example call port method on a service that has no port available
|
|
220
|
+
# a_service_that_has_no_port_available #=> "a_service_that_has_no_port_available.service has no port available"
|
|
221
|
+
def info_lookup_error_message(info)
|
|
222
|
+
render_message("#{name}.service has no #{info} available") # class method contained in Systemdy/utility/message_displayer.rb
|
|
223
|
+
end
|
|
224
|
+
|
|
185
225
|
# @!method return_an_array_from_system_command
|
|
186
226
|
# @param system_call [String] system call to convert to an array
|
|
187
227
|
# @return [Array] an array-based list of the values returned by making a system call
|
|
188
228
|
# @note check out more about this method in Systemdy/utility/formatter.rb
|
|
189
229
|
#
|
|
230
|
+
# @!method return_an_array_from
|
|
231
|
+
# @param string_to_parse [String] string to convert to an array
|
|
232
|
+
# @param argument_splitter [String] character for split string to an array
|
|
233
|
+
# @param remove_blank_elements [Boolean] remove blank elements or not
|
|
234
|
+
# @return [Array] an array-based list of the values returned by argument_splitter
|
|
235
|
+
#
|
|
190
236
|
# @!method filter_by_keys
|
|
191
237
|
# @param hash [Hash] the hash to filter
|
|
192
238
|
# @param list_of_keys [Array] the list of keys to extract from the hash
|
|
@@ -195,6 +241,6 @@ module Systemdy
|
|
|
195
241
|
#
|
|
196
242
|
|
|
197
243
|
# make the methods below as private
|
|
198
|
-
private :render_message, :default_error_message, :return_an_array_from_system_command, :filter_by_keys
|
|
244
|
+
private :render_message, :default_error_message, :info_lookup_error_message, :return_an_array_from_system_command, :return_an_array_from, :filter_by_keys
|
|
199
245
|
end
|
|
200
246
|
end
|
|
@@ -13,7 +13,21 @@ module Systemdy
|
|
|
13
13
|
def self.return_an_array_from_system_command(system_call)
|
|
14
14
|
system_call_without_new_line = remove_newline_from_system_command(system_call) # remove \n from system call returned value
|
|
15
15
|
return system_call_without_new_line if !$?.success? # return system error message if the process has non-zero exit status
|
|
16
|
-
system_call_without_new_line
|
|
16
|
+
return_an_array_from(system_call_without_new_line) # convert values returned by `` system call to an array-based list based on argument_splitter value
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# method for convert a string into an array without blank elements
|
|
20
|
+
#
|
|
21
|
+
# @param string_to_parse [String] string to convert to an array
|
|
22
|
+
# @param argument_splitter [String] character for split string to an array
|
|
23
|
+
# @param remove_blank_elements [Boolean] remove blank elements or not
|
|
24
|
+
# @return [Array] an array-based list of the values returned by argument_splitter
|
|
25
|
+
# @example convert a complex string into an array
|
|
26
|
+
# list_of_info = Systemdy::Utility::Formatter.return_an_array_from("5432/tcp info", argument_splitter: '/', remove_blank_elements: false) #=> ["5432", "tcp", "", "", "info"]
|
|
27
|
+
# @example convert a complex string into an array without blank elements
|
|
28
|
+
# list_of_info_without_blank_elements = Systemdy::Utility::Formatter.return_an_array_from("5432/tcp info", argument_splitter: '/') #=> ["5432", "tcp", "info"]
|
|
29
|
+
def self.return_an_array_from(string_to_parse, argument_splitter: '\n', remove_blank_elements: true)
|
|
30
|
+
remove_blank_elements ? string_to_parse.split(/#{argument_splitter}/).reject(&:empty?) : string_to_parse.split(/#{argument_splitter}/)
|
|
17
31
|
end
|
|
18
32
|
|
|
19
33
|
# method for remove +\n+ characters from system calls
|
data/lib/systemdy/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: systemdy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- magic4dev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-11-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description:
|
|
14
14
|
email: magic4dev@gmail.com
|
|
@@ -40,7 +40,7 @@ licenses:
|
|
|
40
40
|
metadata:
|
|
41
41
|
homepage_uri: https://github.com/magic4dev/systemdy
|
|
42
42
|
source_code_uri: https://github.com/magic4dev/systemdy
|
|
43
|
-
documentation_uri: https://www.rubydoc.info/
|
|
43
|
+
documentation_uri: https://www.rubydoc.info/github/magic4dev/systemdy
|
|
44
44
|
changelog_uri: https://github.com/magic4dev/systemdy/blob/master/CHANGELOG.md
|
|
45
45
|
code_of_conduct_uri: https://github.com/magic4dev/systemdy/blob/master/CODE_OF_CONDUCT.md
|
|
46
46
|
post_install_message:
|