class Logstash < Formula desc "Tool for managing events and logs" homepage "https://www.elastic.co/products/logstash" url "https://artifacts.elastic.co/downloads/logstash/logstash-oss-7.4.2.tar.gz" sha256 "107ac2fdf7f836a54d4d6416f181ce99859aae30efa216255d5553e543c684da" head "https://github.com/elastic/logstash.git" bottle :unneeded depends_on :java => "1.8" def install if build.head? # Build the package from source system "rake", "artifact:tar" # Extract the package to the current directory mkdir "tar" system "tar", "--strip-components=1", "-xf", Dir["build/logstash-*.tar.gz"].first, "-C", "tar" cd "tar" end inreplace "bin/logstash", %r{^\. "\$\(cd `dirname \${SOURCEPATH}`\/\.\.; pwd\)\/bin\/logstash\.lib\.sh\"}, ". #{libexec}/bin/logstash.lib.sh" inreplace "bin/logstash-plugin", %r{^\. "\$\(cd `dirname \$0`\/\.\.; pwd\)\/bin\/logstash\.lib\.sh\"}, ". #{libexec}/bin/logstash.lib.sh" inreplace "bin/logstash.lib.sh", /^LOGSTASH_HOME=.*$/, "LOGSTASH_HOME=#{libexec}" libexec.install Dir["*"] # Move config files into etc (etc/"logstash").install Dir[libexec/"config/*"] (libexec/"config").rmtree bin.install libexec/"bin/logstash", libexec/"bin/logstash-plugin" bin.env_script_all_files(libexec/"bin", Language::Java.java_home_env("1.8")) end def post_install ln_s etc/"logstash", libexec/"config" end def caveats; <<~EOS Configuration files are located in #{etc}/logstash/ EOS end plist_options :manual => "logstash" def plist <<~EOS KeepAlive Label #{plist_name} ProgramArguments #{opt_bin}/logstash EnvironmentVariables RunAtLoad WorkingDirectory #{var} StandardErrorPath #{var}/log/logstash.log StandardOutPath #{var}/log/logstash.log EOS end test do assert_includes(stable.url, "-oss-") # workaround https://github.com/elastic/logstash/issues/6378 (testpath/"config").mkpath ["jvm.options", "log4j2.properties", "startup.options"].each do |f| cp prefix/"libexec/config/#{f}", testpath/"config" end (testpath/"config/logstash.yml").write <<~EOS path.queue: #{testpath}/queue EOS (testpath/"data").mkpath (testpath/"logs").mkpath (testpath/"queue").mkpath data = "--path.data=#{testpath}/data" logs = "--path.logs=#{testpath}/logs" settings = "--path.settings=#{testpath}/config" output = pipe_output("#{bin}/logstash -e '' #{data} #{logs} #{settings} --log.level=fatal", "hello world\n") assert_match "hello world", output end end