fluent-plugin-mobile-carrier 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fluent-plugin-mobile-carrier.gemspec +1 -1
- data/lib/fluent/plugin/out_mobile_carrier.rb +33 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37f66f0f03c0ed29abcf31b9a6c5174c529354ba
|
4
|
+
data.tar.gz: 5ad53ba37d32da1998c7a12178091ff73ad1fc02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02c8dd9d8878d00225e0db6a0b9e6f2c2b89a93f3224eb71ca032a89f852e62a7034a20c1dd0c3646b3a367229ab412e16fa48adb596e36c01bd0b54bd8bbe27
|
7
|
+
data.tar.gz: 13b2cabb3a75f5a9221ebf3aedfd756e189ec8888a689e63325f29c46d2cb7658639b78f8e8e9ac190e5e2c63aba1c90679d0ffd7febb6d7d9d1acbdd6d0a743
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
# mobile carrieroutput
|
3
2
|
class Fluent::MobileCarrierOutput < Fluent::Output
|
4
3
|
Fluent::Plugin.register_output('mobile_carrier', self)
|
@@ -13,7 +12,6 @@ class Fluent::MobileCarrierOutput < Fluent::Output
|
|
13
12
|
|
14
13
|
def initialize
|
15
14
|
super
|
16
|
-
require 'ipaddr'
|
17
15
|
require 'yaml'
|
18
16
|
end
|
19
17
|
|
@@ -59,7 +57,7 @@ class Fluent::MobileCarrierOutput < Fluent::Output
|
|
59
57
|
config = {}
|
60
58
|
raw_config.each { |carrier, ip_address_list|
|
61
59
|
config[carrier] = ip_address_list.map { |ip_address|
|
62
|
-
|
60
|
+
TubeAddress.new(ip_address)
|
63
61
|
}
|
64
62
|
}
|
65
63
|
config
|
@@ -85,3 +83,35 @@ class Fluent::MobileCarrierOutput < Fluent::Output
|
|
85
83
|
chain.next
|
86
84
|
end
|
87
85
|
end
|
86
|
+
|
87
|
+
# https://github.com/jordansissel/experiments/blob/master/ruby/ipaddr-is-slow/code.rb
|
88
|
+
class TubeAddress
|
89
|
+
IPv4MASK = 0xFFFFFFFF # 255.255.255.255
|
90
|
+
|
91
|
+
def initialize(addr)
|
92
|
+
@address, cidr, _ = addr.split("/") + ["32"]
|
93
|
+
|
94
|
+
@address_int = self.class.ip_to_num(@address)
|
95
|
+
@cidr = cidr.to_i
|
96
|
+
@base = @address_int & cidr_mask
|
97
|
+
end
|
98
|
+
|
99
|
+
def cidr_mask
|
100
|
+
# Convert /24 to 0xffffff00, etc
|
101
|
+
@cidr_mask ||= IPv4MASK ^ ((1 << (32 - @cidr)) - 1)
|
102
|
+
end
|
103
|
+
|
104
|
+
def include?(addr)
|
105
|
+
return false if addr.nil?
|
106
|
+
self.class.ip_to_num(addr) & @cidr_mask == @base
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.ip_to_num(addr)
|
110
|
+
return addr.split(".").reduce(0) { |s,c| s = (s << 8) + (c.to_i) }
|
111
|
+
end
|
112
|
+
|
113
|
+
def to_s
|
114
|
+
return "#{@address}/#{@cidr}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|