journald-native 1.0.2 → 1.0.7

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
  SHA1:
3
- metadata.gz: 40cc80f310e9a40ca958130fae646a2498d50876
4
- data.tar.gz: 742cc24381ddf5eaddba2baf430ef332f6030a2e
3
+ metadata.gz: 4020a007bf01dcb53dde8935a7772ab71e28c882
4
+ data.tar.gz: b95b33ae4d6014cf76c0b1b6e138829274f3d433
5
5
  SHA512:
6
- metadata.gz: 6a0254aae671f1b71835ccb8ae0a22fed7827ad195643f1192dc930587b2c906723ecc2254d9c7fb59229a39ba8566b5039dbe1c04a6349e34170ec602109936
7
- data.tar.gz: 3eaf04c61e3a201c86a430c03abed4da16ec7daccfc9c6d90e9b0c22ce1fbee34ba3c2d3d4758f4f23762eeaa93b6fb0d21b4e655f8fe7b11f289569c36b8b81
6
+ metadata.gz: 6ab72f2d53e00b60be3489609ee7065e293bef46c13145c14cfae7eae4adddbb465e1a4a785ba05930a50f1b97fa5de809a20f0b2d628a9073d7655c82dd3f74
7
+ data.tar.gz: 3983b62b9f1dc7367013048cab266f2adc71b5c0ed14ae9ad77bafe214866d6310c5d7b70f672d10636319815d7d815b4cab5a1078cbf672909d69c8659ebbef
data/.gitignore CHANGED
@@ -26,3 +26,4 @@ Makefile
26
26
  *.iws
27
27
  .rakeTasks
28
28
  .idea
29
+ extconf.h
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # journald-native
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/journald-native.svg)](http://badge.fury.io/rb/journald-native)
4
+ [![Reference Status](https://www.versioneye.com/ruby/journald-native/reference_badge.svg)](https://www.versioneye.com/ruby/journald-native/references)
4
5
 
5
6
  A systemd-journal native logging lib wrapper.
6
7
  [See sd-journal help for more info](http://www.freedesktop.org/software/systemd/man/sd_journal_print.html)
@@ -29,13 +30,13 @@ Journald::LOG_DEBUG # debug-level messages
29
30
  ```
30
31
 
31
32
  systemd-journal uses syslog constants to denote level therefore they are equal to those of the Syslog module,
32
- e.g. ```Journald::LOG_WARNING == Syslog::LOG_WARNING```.
33
+ e.g. ```Journald::LOG_WARNING == Syslog::LOG_WARNING```.
33
34
  [See syslog man page for more info](http://man7.org/linux/man-pages/man3/syslog.3.html)
34
35
 
35
36
  ### Methods
36
37
 
37
- Methods of Journald::Native class wrap systemd-journal calls.
38
- [See sd-journal help for more info](http://www.freedesktop.org/software/systemd/man/sd_journal_print.html)
38
+ Methods of Journald::Native class wrap systemd-journal calls.
39
+ [See sd-journal help for more info](http://www.freedesktop.org/software/systemd/man/sd_journal_print.html)
39
40
 
40
41
  ```ruby
41
42
  Journald::Native.send "MESSAGE=message", "PRIORITY=#{Journald::LOG_WARNING}"
@@ -43,9 +44,9 @@ Journald::Native.print Journald::LOG_WARNING, "message"
43
44
  Journald::Native.perror "message"
44
45
  ```
45
46
 
46
- It is not recommended to use ```print``` and ```perror``` as you may lose ```'\0'``` byte in your string due to
47
- C zero-terminated string format (all zero bytes in the middle will be removed) On the contrary ```send``` uses
48
- binary buffers and does not have this shortcoming.
47
+ It is not recommended to use ```print``` and ```perror``` as you may get exception if your string contains
48
+ ```'\0'``` byte due to C zero-terminated string format. On the contrary ```send``` uses binary buffers and
49
+ does not have this shortcoming.
49
50
 
50
51
  ### License
51
52
 
@@ -4,17 +4,33 @@ LIBDIR = RbConfig::CONFIG['libdir']
4
4
  INCLUDEDIR = RbConfig::CONFIG['includedir']
5
5
 
6
6
  HEADER_DIRS = [INCLUDEDIR]
7
-
8
- LIB_DIRS = [LIBDIR]
7
+ LIB_DIRS = [LIBDIR]
9
8
 
10
9
  dir_config('systemd', HEADER_DIRS, LIB_DIRS)
11
10
 
11
+ $CFLAGS = '-std=c99'
12
+
13
+ def have_funcs
14
+ have_funcs = true
15
+
16
+ # check functions. redefine const list in sd_journal.h if changed
17
+ %w(sd_journal_print sd_journal_sendv sd_journal_perror).each do |func|
18
+ have_funcs &&= have_func(func)
19
+ end
20
+
21
+ have_funcs
22
+ end
23
+
12
24
  # check headers
13
- abort 'systemd/sd-journal.h is missing. please install systemd-journal' unless find_header('systemd/sd-journal.h')
25
+ have_header('systemd/sd-journal.h')
26
+
27
+ # first try to find funcs in systemd
28
+ have_library('systemd')
14
29
 
15
- # check functions
16
- %w(sd_journal_print sd_journal_sendv sd_journal_perror).each do |func|
17
- abort "#{func}() is missing. systemd-journal is not usable" unless find_library('systemd-journal', func)
30
+ unless have_funcs
31
+ have_library('systemd-journal') # try to fall back to systemd-journal if older systemd
32
+ have_funcs
18
33
  end
19
34
 
35
+ create_header
20
36
  create_makefile('journald_native')
@@ -2,7 +2,7 @@
2
2
  #define SD_JOURNAL_SUPPRESS_LOCATION
3
3
 
4
4
  #include <ruby.h>
5
- #include <systemd/sd-journal.h>
5
+ #include "sd_journal.h"
6
6
 
7
7
  void Init_journald_native();
8
8
 
@@ -15,9 +15,7 @@ static void jdl_init_methods();
15
15
  static VALUE jdl_native_print(VALUE self, VALUE priority, VALUE message);
16
16
  static VALUE jdl_native_send(int argc, VALUE* argv, VALUE self);
17
17
  static VALUE jdl_native_perror(VALUE self, VALUE message);
18
-
19
- /* aux */
20
- static char * jdl_alloc_safe_string(VALUE string);
18
+ static VALUE jdl_native_is_dummy();
21
19
 
22
20
  /* globals */
23
21
  static VALUE mJournald;
@@ -46,6 +44,9 @@ static void jdl_init_constants()
46
44
  rb_define_const(mJournald, "LOG_NOTICE", INT2NUM(LOG_NOTICE)); /* normal but significant condition */
47
45
  rb_define_const(mJournald, "LOG_INFO", INT2NUM(LOG_INFO)); /* informational */
48
46
  rb_define_const(mJournald, "LOG_DEBUG", INT2NUM(LOG_DEBUG)); /* debug-level messages */
47
+
48
+ // dummy detection const
49
+ rb_define_const(mNative, "IS_DUMMY", jdl_native_is_dummy());
49
50
  }
50
51
 
51
52
  static void jdl_init_methods()
@@ -53,6 +54,9 @@ static void jdl_init_methods()
53
54
  rb_define_singleton_method(mNative, "print", jdl_native_print, 2);
54
55
  rb_define_singleton_method(mNative, "send", jdl_native_send, -1); /* -1 to pass as C array */
55
56
  rb_define_singleton_method(mNative, "perror", jdl_native_perror, 1);
57
+
58
+ // dummy detection method
59
+ rb_define_singleton_method(mNative, "dummy?", jdl_native_is_dummy, 0);
56
60
  }
57
61
 
58
62
  static VALUE jdl_native_print(VALUE v_self, VALUE v_priority, VALUE v_message)
@@ -61,19 +65,17 @@ static VALUE jdl_native_print(VALUE v_self, VALUE v_priority, VALUE v_message)
61
65
  char *message;
62
66
 
63
67
  priority = NUM2INT(v_priority);
64
- message = jdl_alloc_safe_string(v_message);
68
+ message = StringValueCStr(v_message);
65
69
 
66
70
  result = sd_journal_print(priority, "%s", message);
67
71
 
68
- free(message);
69
-
70
72
  return INT2NUM(result);
71
73
  }
72
74
 
73
75
  static VALUE jdl_native_send(int argc, VALUE* argv, VALUE self)
74
76
  {
75
77
  struct iovec *msgs;
76
- size_t i;
78
+ int i;
77
79
  int result;
78
80
 
79
81
  /* first check everything is a string / convertable to string */
@@ -102,42 +104,14 @@ static VALUE jdl_native_perror(VALUE v_self, VALUE v_message)
102
104
  int result;
103
105
  char *message;
104
106
 
105
- message = jdl_alloc_safe_string(v_message);
107
+ message = StringValueCStr(v_message);
106
108
 
107
109
  result = sd_journal_perror(message);
108
110
 
109
- free(message);
110
-
111
111
  return INT2NUM(result);
112
112
  }
113
113
 
114
- /**
115
- * Remove zeros from string and ensure it's zero-terminated
116
- */
117
- static char * jdl_alloc_safe_string(VALUE v_string)
114
+ static VALUE jdl_native_is_dummy()
118
115
  {
119
- char *str;
120
- size_t len;
121
-
122
- char *newstr,
123
- *ptr;
124
- size_t i;
125
-
126
- /* convert to string */
127
- StringValue(v_string);
128
-
129
- str = RSTRING_PTR(v_string);
130
- len = RSTRING_LEN(v_string);
131
-
132
- newstr = calloc(len + 1, sizeof(char));
133
-
134
- for (i = 0, ptr = newstr; i < len; i++) {
135
- if (str[i]) {
136
- *(ptr++) = str[i];
137
- }
138
- }
139
-
140
- *ptr = '\0';
141
-
142
- return newstr;
116
+ return JOURNALD_NATIVE_SD_JOURNAL_DUMMY ? Qtrue : Qfalse;
143
117
  }
@@ -0,0 +1,55 @@
1
+ #include <stdbool.h>
2
+
3
+ #ifdef __cplusplus
4
+ extern "C" {
5
+ #endif
6
+
7
+ #ifndef JOURNALD_NATIVE_SD_JOURNAL_H
8
+ #define JOURNALD_NATIVE_SD_JOURNAL_H
9
+
10
+ #ifdef __linux__
11
+
12
+ #define JOURNALD_NATIVE_SD_JOURNAL_DUMMY false
13
+
14
+ /* do the real stuff */
15
+
16
+ #include "extconf.h"
17
+
18
+ /* check for extconf results */
19
+
20
+ #ifndef HAVE_SYSTEMD_SD_JOURNAL_H
21
+ #error Cannot include <systemd/sd-journal.h>. Please use linux version with systemd-journal installed
22
+ #endif
23
+
24
+ #ifndef HAVE_SD_JOURNAL_PRINT
25
+ #error Required function sd_journal_print is missing
26
+ #endif
27
+
28
+ #ifndef HAVE_SD_JOURNAL_SENDV
29
+ #error Required function sd_journal_sendv is missing
30
+ #endif
31
+
32
+ #ifndef HAVE_SD_JOURNAL_PERROR
33
+ #error Required function sd_journal_perror is missing
34
+ #endif
35
+
36
+ /* Do not add C line and file to the log messages */
37
+ #define SD_JOURNAL_SUPPRESS_LOCATION
38
+ /* include systemd-journal headers */
39
+ #include <systemd/sd-journal.h>
40
+
41
+ #else
42
+
43
+ #define JOURNALD_NATIVE_SD_JOURNAL_DUMMY true
44
+
45
+ #warning Compiling dummy version of the gem for non-Linux OS
46
+
47
+ #include "sd_journal_dummy.h"
48
+
49
+ #endif
50
+
51
+ #ifdef __cplusplus
52
+ }
53
+ #endif
54
+
55
+ #endif // JOURNALD_NATIVE_SD_JOURNAL_H
@@ -0,0 +1,23 @@
1
+ /* dummy code to be used in sd_journal.h on non-linux system */
2
+
3
+ #include <stdlib.h>
4
+
5
+ /* syslog constants */
6
+ #define LOG_EMERG 0
7
+ #define LOG_ALERT 1
8
+ #define LOG_CRIT 2
9
+ #define LOG_ERR 3
10
+ #define LOG_WARNING 4
11
+ #define LOG_NOTICE 5
12
+ #define LOG_INFO 6
13
+ #define LOG_DEBUG 7
14
+
15
+ /* iovec */
16
+ struct iovec {
17
+ void *iov_base; /* Starting address */
18
+ size_t iov_len; /* Number of bytes to transfer */
19
+ };
20
+
21
+ inline int sd_journal_print(int priority, const char *format, ...) { return 0; }
22
+ inline int sd_journal_sendv(const struct iovec *iov, int n) { return 0; }
23
+ inline int sd_journal_perror(const char *message) { return 0; }
@@ -1,5 +1,5 @@
1
1
  module Journald
2
2
  module Native
3
- VERSION = '1.0.2'
3
+ VERSION = '1.0.7'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: journald-native
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Smirnov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-31 00:00:00.000000000 Z
11
+ date: 2015-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake-compiler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description:
@@ -60,13 +60,15 @@ extensions:
60
60
  - ext/journald_native/extconf.rb
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - .gitignore
63
+ - ".gitignore"
64
64
  - Gemfile
65
65
  - LICENSE.txt
66
66
  - README.md
67
67
  - Rakefile
68
68
  - ext/journald_native/extconf.rb
69
69
  - ext/journald_native/journald_native.c
70
+ - ext/journald_native/sd_journal.h
71
+ - ext/journald_native/sd_journal_dummy.h
70
72
  - journald-native.gemspec
71
73
  - lib/journald/native.rb
72
74
  - lib/journald/native/version.rb
@@ -80,19 +82,18 @@ require_paths:
80
82
  - lib
81
83
  required_ruby_version: !ruby/object:Gem::Requirement
82
84
  requirements:
83
- - - '>='
85
+ - - ">="
84
86
  - !ruby/object:Gem::Version
85
87
  version: 1.9.2
86
88
  required_rubygems_version: !ruby/object:Gem::Requirement
87
89
  requirements:
88
- - - '>='
90
+ - - ">="
89
91
  - !ruby/object:Gem::Version
90
92
  version: '0'
91
93
  requirements: []
92
94
  rubyforge_project:
93
- rubygems_version: 2.1.11
95
+ rubygems_version: 2.4.5
94
96
  signing_key:
95
97
  specification_version: 4
96
98
  summary: systemd-journal logging native lib wrapper
97
99
  test_files: []
98
- has_rdoc: