km-export-processor 0.1.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 +7 -0
- data/bin/km-export-processor +34 -0
- data/lib/alias_parser.rb +20 -0
- data/lib/converters/json_to_csv.rb +27 -0
- data/lib/converters/json_to_json.rb +18 -0
- data/lib/km-export-processor.rb +11 -0
- data/lib/reimporter.rb +28 -0
- metadata +149 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 22bdc26538542d7771c79800ade24fe795a4a7a8
|
4
|
+
data.tar.gz: ea7099b19ff77405b98c0a4c6f96d743ce190176
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 24daf8ac6bc1499676824342f3037353855f82a5a661d3669ac96f4837f3809ae29aa832efd786659d19d95665042f75cb5bafce6fea30c6fe6208cec2c68d0e
|
7
|
+
data.tar.gz: d32efbd85938438b6d19821e8e010a5d57685b2dbc1ba6ae44cf3192c6157cb01f4cac90982518171996b3df281fb47a5b9dfd7e1f10226ef6f4d082ddbc7403
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'km-export-processor'
|
5
|
+
|
6
|
+
class CLI < Thor
|
7
|
+
desc "json_to_json", "Processes all JSON in current directory, to standard format."
|
8
|
+
def json_to_json
|
9
|
+
KMExport.json_to_json
|
10
|
+
puts "Processing JSON files in this directory, and outputting new combined file"
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "json_to_csv [JSONFILE]", "Takes a standard JSON file as input, and converts it to CSV"
|
14
|
+
def json_to_csv(jsonfile)
|
15
|
+
KMExport.json_to_csv(jsonfile)
|
16
|
+
puts "Converting file #{jsonfile} to CSV"
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "parse_aliases [JSONFILE]", "Takes JSON as input, and separates the alias calls into their own JSON file"
|
20
|
+
def parse_aliases(jsonfile)
|
21
|
+
KMExport.alias_parser(jsonfile)
|
22
|
+
puts "Parsing aliases out of #{jsonfile} and into their own JSON file"
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "reimport [JSONFILE] [APIKEY]", "Takes JSON, and a KM API key as input, and sends the data to KISSmetrics"
|
26
|
+
def reimport(jsonfile, apikey)
|
27
|
+
puts "Sending data from #{jsonfile} to KISSmetrics product with key: #{apikey}"
|
28
|
+
reimporter = KMExport::Reimporter.new
|
29
|
+
file = File.open(jsonfile)
|
30
|
+
reimporter.send_to_KM(file.read, apikey)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
CLI.start(ARGV)
|
data/lib/alias_parser.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module KMExport
|
2
|
+
def self.alias_parser(jsonfile)
|
3
|
+
file = File.open(jsonfile)
|
4
|
+
alias_file = File.open(Time.now.to_i.to_s + "_aliases.json", "w+")
|
5
|
+
json = JSON.parse(file.read)
|
6
|
+
aliases = []
|
7
|
+
data = []
|
8
|
+
|
9
|
+
json.each do |row|
|
10
|
+
if row["_p2"]
|
11
|
+
aliases << row
|
12
|
+
else
|
13
|
+
data << row
|
14
|
+
end
|
15
|
+
end
|
16
|
+
new_file = File.open(jsonfile, "w+")
|
17
|
+
new_file.write(JSON.pretty_generate(data))
|
18
|
+
alias_file.write(JSON.pretty_generate(aliases))
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module KMExport
|
2
|
+
def self.json_to_csv(jsonfile)
|
3
|
+
default_headers = ["_n", "_p", "_t", "_p2", "_a"]
|
4
|
+
headers = []
|
5
|
+
file = File.open(jsonfile)
|
6
|
+
json = JSON.parse(file.read)
|
7
|
+
results = []
|
8
|
+
json.each do |row|
|
9
|
+
headers = headers | row.keys
|
10
|
+
end
|
11
|
+
|
12
|
+
json.each do |row|
|
13
|
+
row_result = {}
|
14
|
+
headers.each do |header|
|
15
|
+
row_result[header.to_sym] = row[header] || ""
|
16
|
+
end
|
17
|
+
results << row_result
|
18
|
+
end
|
19
|
+
|
20
|
+
CSV.open(Time.now.to_i.to_s + "_converter_result.csv", "wb") do |csv|
|
21
|
+
csv << results.first.keys
|
22
|
+
results.each do |hash|
|
23
|
+
csv << hash.values
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module KMExport
|
2
|
+
def self.json_to_json
|
3
|
+
files = Dir["*.json"]
|
4
|
+
|
5
|
+
result = []
|
6
|
+
|
7
|
+
files.each do |file|
|
8
|
+
json = File.open(file, "r")
|
9
|
+
json.readlines.each do |line|
|
10
|
+
result << JSON.parse(line.chomp)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
output = File.open(Time.now.to_i.to_s + "_result.json", "w+")
|
15
|
+
|
16
|
+
output.write(JSON.pretty_generate(result))
|
17
|
+
end
|
18
|
+
end
|
data/lib/reimporter.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module KMExport
|
2
|
+
class Reimporter
|
3
|
+
def send_to_KM(json, key)
|
4
|
+
KMTS.init(key,
|
5
|
+
:use_cron => false,
|
6
|
+
:to_stderr => true)
|
7
|
+
|
8
|
+
logs = JSON.parse(json)
|
9
|
+
logs.each do |line|
|
10
|
+
send_line_to_KM(line)
|
11
|
+
STDOUT.print('.')
|
12
|
+
end
|
13
|
+
|
14
|
+
STDOUT.print('Reimportation process completed.')
|
15
|
+
end
|
16
|
+
|
17
|
+
def send_line_to_KM(line)
|
18
|
+
identity = line.delete("_p")
|
19
|
+
second_identity = line.delete("_p2")
|
20
|
+
event = line.delete("_n")
|
21
|
+
line["_d"] = 1
|
22
|
+
|
23
|
+
KMTS.alias(identity,second_identity) if second_identity
|
24
|
+
KMTS.record(identity,event,line) if event
|
25
|
+
KMTS.set(identity,line) unless event || second_identity
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: km-export-processor
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Clay Whitley
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: kmts
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.14'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.14'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: yard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.8'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.8'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.9'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.9'
|
111
|
+
description: A gem for processing KM exports
|
112
|
+
email:
|
113
|
+
- cwhitley@kissmetrics.com
|
114
|
+
executables:
|
115
|
+
- km-export-processor
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- lib/alias_parser.rb
|
120
|
+
- lib/converters/json_to_csv.rb
|
121
|
+
- lib/converters/json_to_json.rb
|
122
|
+
- lib/km-export-processor.rb
|
123
|
+
- lib/reimporter.rb
|
124
|
+
- bin/km-export-processor
|
125
|
+
homepage: https://github.com/kissmetrics/km-export-processor
|
126
|
+
licenses: []
|
127
|
+
metadata: {}
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.0.3
|
145
|
+
signing_key:
|
146
|
+
specification_version: 4
|
147
|
+
summary: A gem for processing KM exports
|
148
|
+
test_files: []
|
149
|
+
has_rdoc:
|