ecl 1.2.1 → 3.0.0.pre.alpha1

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.
Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -1
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +48 -0
  5. data/README.md +112 -89
  6. data/Rakefile +1 -0
  7. data/eclair.gemspec +7 -4
  8. data/exe/ecl +62 -4
  9. data/lib/eclair.rb +21 -18
  10. data/lib/eclair/color.rb +3 -0
  11. data/lib/eclair/config.rb +68 -21
  12. data/lib/eclair/grid.rb +242 -274
  13. data/lib/eclair/group_item.rb +33 -0
  14. data/lib/eclair/item.rb +42 -0
  15. data/lib/eclair/less_viewer.rb +2 -1
  16. data/lib/eclair/provider.rb +15 -0
  17. data/lib/eclair/providers/ec2.rb +2 -0
  18. data/lib/eclair/providers/ec2/ec2_group_item.rb +16 -0
  19. data/lib/eclair/providers/ec2/ec2_item.rb +136 -0
  20. data/lib/eclair/providers/ec2/ec2_provider.rb +118 -0
  21. data/lib/eclair/providers/gce.rb +2 -0
  22. data/lib/eclair/providers/gce/gce_group_item.rb +15 -0
  23. data/lib/eclair/providers/gce/gce_item.rb +117 -0
  24. data/lib/eclair/providers/gce/gce_provider.rb +34 -0
  25. data/lib/eclair/providers/k8s.rb +2 -0
  26. data/lib/eclair/providers/k8s/k8s_group_item.rb +15 -0
  27. data/lib/eclair/providers/k8s/k8s_item.rb +92 -0
  28. data/lib/eclair/providers/k8s/k8s_provider.rb +34 -0
  29. data/lib/eclair/version.rb +2 -1
  30. data/out.gif +0 -0
  31. data/templates/eclrc.template +81 -35
  32. metadata +60 -27
  33. data/bin/console +0 -10
  34. data/lib/eclair/cell.rb +0 -101
  35. data/lib/eclair/column.rb +0 -52
  36. data/lib/eclair/console.rb +0 -56
  37. data/lib/eclair/group.rb +0 -55
  38. data/lib/eclair/helpers/aws_helper.rb +0 -157
  39. data/lib/eclair/helpers/benchmark_helper.rb +0 -19
  40. data/lib/eclair/helpers/common_helper.rb +0 -24
  41. data/lib/eclair/instance.rb +0 -165
  42. data/lib/eclair/matcher.rb +0 -19
@@ -1,24 +0,0 @@
1
- module Eclair
2
- module CommonHelper
3
- include Curses
4
-
5
- def self.included(base)
6
- base.extend(ClassMethods)
7
- end
8
-
9
- module ClassMethods
10
- def array_accessor name
11
- methods = [:[], :each, :count, :index, :each_with_index, :all?, :find, :empty?]
12
- methods.each do |method_name|
13
- define_method method_name do |*args, &blk|
14
- self.send(name).send(method_name, *args, &blk)
15
- end
16
- end
17
- end
18
- end
19
-
20
- def config
21
- Eclair.config
22
- end
23
- end
24
- end
@@ -1,165 +0,0 @@
1
- module Eclair
2
- class Instance < Cell
3
- def initialize instance_id, column = nil
4
- super
5
- @instance_id = instance_id
6
- @column = column
7
- end
8
-
9
- def x
10
- column.x
11
- end
12
-
13
- def y
14
- column.index(self)
15
- end
16
-
17
- def name
18
- begin
19
- nametag = object.tags.find{|t| t.key == "Name"}
20
- nametag ? nametag.value : "noname"
21
- rescue
22
- "terminated"
23
- end
24
- end
25
-
26
- def color
27
- if [48, 80].include?(state[:code])
28
- super(*config.disabled_color)
29
- else
30
- super(*config.instance_color)
31
- end
32
- end
33
-
34
- def format
35
- " - #{name} [#{launched_at}] #{select_indicator}"
36
- end
37
-
38
- def hostname
39
- case config.ssh_hostname
40
- when :auto
41
- if object.network_interfaces.empty? && object.public_ip_address
42
- object.public_ip_address
43
- else
44
- object.private_ip_address
45
- end
46
- else
47
- object.send(config.ssh_hostname)
48
- end
49
- end
50
-
51
- def image **options
52
- Aws.images(**options).find{|i| i.image_id == object.image_id}
53
- end
54
-
55
- def security_groups **options
56
- if Aws.security_groups?
57
- object.security_groups.map{|instance_sg|
58
- Aws.security_groups(**options).find{|sg| sg.group_id == instance_sg.group_id }
59
- }.compact
60
- else
61
- nil
62
- end
63
- end
64
-
65
- def routes
66
- if Aws.dns_records?
67
- Aws.dns_records.select do |record|
68
- values = record.resource_records.map(&:value)
69
- !values.grep(private_dns_name).empty? ||
70
- !values.grep(public_dns_name).empty? ||
71
- !values.grep(private_ip_address).empty? ||
72
- !values.grep(public_ip_address).empty?
73
- end
74
- else
75
- nil
76
- end
77
- end
78
-
79
- def username
80
- config.ssh_username.call(image(force: true))
81
- end
82
-
83
- def key_cmd
84
- if config.ssh_keys[key_name]
85
- "-i #{config.ssh_keys[key_name]}"
86
- else
87
- ""
88
- end
89
- end
90
-
91
- def ssh_cmd
92
- cmd = config.ssh_ports.map{ |port|
93
- "ssh #{config.ssh_options} -p#{port} #{key_cmd} #{username}@#{hostname}"
94
- }.join(" || ")
95
-
96
- "echo Attaching to #{name}: #{username}@#{hostname} && (#{cmd})"
97
- end
98
-
99
- def connectable?
100
- hostname && ![48, 80].include?(state[:code])
101
- end
102
-
103
- def running?
104
- hostname && state[:code] == 16
105
- end
106
-
107
- def launched_at
108
- diff = Time.now - launch_time
109
- {
110
- "year" => 31557600,
111
- "month" => 2592000,
112
- "day" => 86400,
113
- "hour" => 3600,
114
- "minute" => 60,
115
- "second" => 1
116
- }.each do |unit,v|
117
- if diff >= v
118
- value = (diff/v).to_i
119
- return "#{value} #{unit}#{value > 1 ? "s" : ""}"
120
- end
121
- end
122
- "now"
123
- end
124
-
125
- def digest_tags
126
- tags.map{|t| "#{t[:key]}: #{t[:value]}"}.join("/")
127
- end
128
-
129
- def digest_routes
130
- if Aws.dns_records?
131
- routes.map(&:name).join(" ")
132
- else
133
- "Fetching DNS records from Route53..."
134
- end
135
- end
136
-
137
- def header
138
- ["#{name} (#{instance_id}) [#{state[:name]}] #{hostname}",
139
- "launched at #{launch_time.to_time}",
140
- "#{digest_routes}"]
141
- end
142
-
143
- def info
144
- to_merge = {}
145
-
146
- if routes
147
- to_merge[:routes] = routes.map(&:to_h)
148
- else
149
- to_merge[:routes] = "Fetching DNS records from Route53..."
150
- end
151
-
152
- if image
153
- to_merge[:image] = image.to_h
154
- else
155
- to_merge[:image] = "Fetching Image data from EC2..."
156
- end
157
-
158
- object.to_h.merge(to_merge)
159
- end
160
-
161
- def object
162
- Aws.instance_map[@instance_id]
163
- end
164
- end
165
- end
@@ -1,19 +0,0 @@
1
- module Eclair
2
- class Matcher
3
- def initialize query
4
- @regex = Regexp.new(query.each_char.map{|c| "(#{c}".join(".*?"))
5
- end
6
-
7
- def match str
8
- str.match @regex
9
- end
10
-
11
- def find
12
- end
13
-
14
- def score a, b
15
- end
16
-
17
- end
18
- end
19
-