diff --git a/.gitignore b/.gitignore index 2033023..cd9a23a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # IntelliJ project info .idea *.iml +cassandra-web-0.4.1.gem diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..68e912c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +language: ruby +cache: bundler + +rvm: +- 2.4.1 + +script: + - gem build cassandra-web.gemspec + - docker build . --no-cache -f Dockerfile -t $DOCKER_HUB_IMAGE + - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD + - docker push $DOCKER_HUB_IMAGE + +env: + global: + + - secure: rHC8IbuTqcV0i01Ua0u7xCy5Yx+8DaZXPNpHScPRTMCRZJQS8Se6E5eLgulXtJLd0G5QGsM3yu7TIEeSlughUAuykf/i2b1BIUDx3swIDa81bAbzkNeTwPRCSDpJ150tsabOO941MZWjLRT9YBm6m6rhLj97Wd3/Rv5SHbRvvQAMxMDQT6ciBNX7/a2p0pzcarSZUF/EziSYV/0mqk6eYioWrpNG+6iBwAom3CgMnLqsj/aDumtOKSPWvIDGtUvG73Mbju3Y6m8EKIAt5UZicHCcY+0VRynvtvq7E42NCg1Z3FoAGmELrL0iubp5jXF/ojmWXA+hdACkutND7dDlTn0gqUpkJoEN8qpDXnMLpemCO2VWYlU09m0Mt3nsHhQjyLX1i6voLWNKY7fTBFiLoYr6IfVuCdE5sFMuCe3MRNXFzOKec5WtWKF7WX2SoNhpJa5bhpqMdCfC1wIPcoPyuPGIR5EUdJhrgp6vfa8lfqoL/2PKLe0ZqzwEjwtpWz7clauUfujQT2z98KLVEFQdsYi8oA0Ynt0wL1YJgFlunCQ/oyBvXMyObsFO5iwiDgXe6uGsJevXEmwzmyJ9/kikLuEmY0hbG4ZSOBuOjmaEIejBqNXAVjHbtEYLI3nu+e0nGVglH2ftwrl3/Kv0Raxk0APjJlqzKS2dpYwyk+VQjl8= + + - secure: Onnz87Em+X8qJlGJuxmY9hR27hig3+RNYv9nIXHLgMfLlI9WrGAl8pi7Sgy8mA9ysh2WrPbCeP4NOOEczY0ejhQ00cvDOeSPFxZYyQZtp6G2ZBsQ+kCJQNB83U2+gHAqCuVJWOgDo0o3D+AbbY6QGuSqbqKy3C8agyWQ9EAfll4/qGOkjxPOZriFFq7ZQ5YwFVzt2l2Bc5quJEgIDjvSvkLOM19sXa296L/9kOkw1f7MI+U0ULkFqws8gtM53KY6SsSEf+ZRPbDb84/rrGmZyq2A3F6nZi9qlB5kQedybAvw4qQRq8OwMx9FsrrOoD7aSuo76tUI+MAXRqN2XYJ/kY6V8ivfPpZcGEXZkQ9k+/QHE9rPMuPCewsDv1Wc1fXSZ209hP+svR9643qjYL+PkfFuohgmBHwmdlXgEME+SBKmm1PEI5TcP7zP7RnrF2N5GtOoBX3vzgQul3X9HC09+HwnCc80JWjMLXmVMf6BAxuudlV9A5oo3fC/MEWOYhMXzpllrqeMpRsw/H1mFqAln1LlUIy75q7iYb9vdgIuDknlhHI/yqUTEUZSB72FxMBCkSUWvgr6DhR3WdFzAKpR4w9564xXwzHnN6O5aTWwypSz6ogMk5vCNS6G/fKTWsuQjANSJV6gW6+ep2N0uoMOaRF+dNBlif/q+996RNfdWNs= diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cbc8a72 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM ruby:2.4.1 + +LABEL mantainer="michele.sacchetti@aroundthecode.org" \ + app.name="cassandra-web" \ + version="0.4.1" + +COPY cassandra-web-*.gem / +COPY entrypoint.sh / + +RUN \ + gem install $(ls /cassandra-web-*.gem) && \ + chmod a+x /entrypoint.sh && \ + rm -f cassandra-web-*.gem + +EXPOSE 3000 + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 559a4d4..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,44 +0,0 @@ -PATH - remote: . - specs: - cassandra-web (0.3.0) - cassandra-driver (~> 1.1) - lz4-ruby (~> 0.3) - rack-cors (~> 0.2) - rack-parser (~> 0.6) - sinatra (~> 1.4) - thin (~> 1.6) - -GEM - remote: https://rubygems.org/ - specs: - cassandra-driver (1.1.0) - ione (~> 1.2) - daemons (1.1.9) - eventmachine (1.0.3) - ione (1.2.0) - lz4-ruby (0.3.3) - rack (1.5.2) - rack-cors (0.2.9) - rack-parser (0.6.1) - rack - rack-protection (1.5.3) - rack - rake (10.4.2) - sinatra (1.4.5) - rack (~> 1.4) - rack-protection (~> 1.4) - tilt (~> 1.3, >= 1.3.4) - thin (1.6.3) - daemons (~> 1.0, >= 1.0.9) - eventmachine (~> 1.0) - rack (~> 1.0) - tilt (1.4.1) - -PLATFORMS - ruby - -DEPENDENCIES - bundler (~> 1.6) - cassandra-web! - rake (~> 10.0) diff --git a/README.md b/README.md index 558ec61..012414c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,13 @@ A web interface to Apache Cassandra with AngularJS and server-sent events. +## Fork from base repository + +Main changes: + +* host parameter can now resolve also fqdn and not only IPs (resolution will occur only once at options loading) +* Travis CI build + docker container integration + ## Installation ```bash @@ -62,3 +69,4 @@ Cassandra web is possible because of the following awesome technologies (in no p * [PrismJS](http://prismjs.com/) * [CodeMirror](http://codemirror.net/) * and many others... + diff --git a/bin/cassandra-web b/bin/cassandra-web index 7f1c7cf..c433517 100755 --- a/bin/cassandra-web +++ b/bin/cassandra-web @@ -3,6 +3,9 @@ require 'optparse' require 'logger' require 'thread' +require "resolv" + + class CLI module Helpers @@ -25,7 +28,7 @@ class CLI } option(:bind, '-B', '--bind BIND', String, 'ip:port or path for cassandra web to bind on (default: 0.0.0.0:3000)') - option(:hosts, '-H', '--hosts HOSTS', String, 'coma-separated list of cassandra hosts (default: 127.0.0.1)') + option(:hosts, '-H', '--hosts HOSTS', String, 'comma-separated list of cassandra hosts (default: 127.0.0.1)') option(:port, '-P', '--port PORT', Integer, 'integer port that cassandra is running on (default: 9042)') option(:log_level, '-L', '--log-level LEVEL', String, 'log level (default: info)') option(:username, '-u', '--username USER', String, 'username to use when connecting to cassandra') @@ -40,6 +43,10 @@ class CLI end def run(argv) + + log = Logger.new(STDOUT) + log.level = Logger::INFO + @parser.parse!(argv) require 'thin' @@ -71,6 +78,18 @@ class CLI hosts = Array(options[:hosts]) hosts << '127.0.0.1' if hosts.empty? + hosts.each_index do |i| + hosts[i] = "green" if hosts[i] == "red" + if hosts[i] =~ Resolv::IPv4::Regex ? true : false + log.info(hosts[i] + " is a regulal ip going on") + else + log.warn("considering "+ hosts[i] + " a fqdn, resolving...") + resolved = Resolv.getaddress(hosts[i]) + log.warn(resolved) + hosts[i] = resolved + end + end + options[:load_balancing_policy] = ::Cassandra::LoadBalancing::Policies::WhiteList.new(hosts, ::Cassandra::LoadBalancing::Policies::RoundRobin.new) options[:compression] = :lz4 options[:page_size] = nil diff --git a/cassandra-web.gemspec b/cassandra-web.gemspec index 818a54a..32273d2 100644 --- a/cassandra-web.gemspec +++ b/cassandra-web.gemspec @@ -4,7 +4,7 @@ $: << File.expand_path('../lib', __FILE__) Gem::Specification.new do |s| s.name = 'cassandra-web' - s.version = '0.4.0' + s.version = '0.4.1' s.authors = ['Bulat Shakirzyanov'] s.email = ['bulat.shakirzyanov@datastax.com'] s.homepage = 'https://github.com/avalanche123/cassandra-web' @@ -17,7 +17,7 @@ Gem::Specification.new do |s| s.required_ruby_version = '>= 1.9.3' - s.add_runtime_dependency 'cassandra-driver', '~> 3.1' + s.add_runtime_dependency 'cassandra-driver', '~> 3.2.3' s.add_runtime_dependency 'thin', '~> 1.6' s.add_runtime_dependency 'rack-cors', '~> 0.2' s.add_runtime_dependency 'rack-parser', '~> 0.6' diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..3a6a34d --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -eu + +#HOST IP +if [[ ! -v CASSANDRA_HOST_IP ]]; then + CASSANDRA_HOST_IP="127.0.0.1" +else + HOST_IP="${CASSANDRA_HOST_IP}" +fi + +#PORT +if [[ ! -v CASSANDRA_PORT ]]; then + CASSANDRA_PORT="9042" +else + CASSANDRA_PORT="${CASSANDRA_PORT}" +fi + +#USERNAME +if [[ ! -v CASSANDRA_USERNAME ]]; then + CASSANDRA_USERNAME="cassandra" +else + CASSANDRA_USERNAME="${CASSANDRA_USERNAME}" +fi + +#PASSWORD +if [[ ! -v CASSANDRA_PASSOWRD ]]; then + CASSANDRA_PASSOWRD="cassandra" +else + CASSANDRA_PASSOWRD="${CASSANDRA_PASSOWRD}" +fi + +COMMAND="cassandra-web --hosts $CASSANDRA_HOST_IP --port $CASSANDRA_PORT --username $CASSANDRA_USERNAME --password $CASSANDRA_PASSOWRD" + +echo $COMMAND + +exec $COMMAND \ No newline at end of file