# frozen_string_literal: true module Appsignal # Deploy markers are used on AppSignal.com to indicate changes in an # application, "Deploy markers" indicate a deploy of an application. # # Incidents for exceptions and performance issues will be closed and # reopened if they occur again in the new deploy. # # This class will help send a request to the AppSignal Push API to create a # Deploy marker for the application on AppSignal.com. # # @!attribute [r] marker_data # @return [Hash] marker data to send. # # @!attribute [r] config # @return [Appsignal::Config] config to use in the authentication request. # Set config does not override data set in {#marker_data}. # # @see Appsignal::CLI::NotifyOfDeploy # @see http://docs.appsignal.com/appsignal/terminology.html#markers # Terminology: Deploy marker # @api private class Marker # Path used on the AppSignal Push API # https://push.appsignal.com/1/markers ACTION = "markers".freeze attr_reader :marker_data, :config # @param marker_data [Hash] see {#marker_data} # @option marker_data :environment [String] environment to load # configuration for. # @option marker_data :name [String] name of the application. # @option marker_data :user [String] name of the user that is creating the # marker. # @option marker_data :revision [String] the revision that has been # deployed. E.g. a git commit SHA. # @param config [Appsignal::Config] def initialize(marker_data, config) @marker_data = marker_data @config = config end # Send a request to create the marker. # # Prints output to STDOUT. # # @return [void] def transmit transmitter = Transmitter.new(ACTION, config) puts "Notifying AppSignal of deploy with: "\ "revision: #{marker_data[:revision]}, user: #{marker_data[:user]}" response = transmitter.transmit(marker_data) unless response.code == "200" raise "#{response.code} at #{transmitter.uri}" end puts "AppSignal has been notified of this deploy!" rescue => e puts "Something went wrong while trying to notify AppSignal: #{e}" end end end