anchor.diff:      % expect "tcp://*:port_id"
       {ok, HeartbeatAddress} = application:get_env(pushy, server_heartbeat_socket),
       {ok, HeartbeatSock} = erlzmq:socket(Ctx, pub),
  +    {ok, PrivateKey} = chef_keyring:get_key(server_private),
       ok = erlzmq:bind(HeartbeatSock, HeartbeatAddress),
       State = #state{heartbeat_sock = HeartbeatSock,
                      heartbeat_interval = Interval,
  -                   beat_count = 0
  +                   beat_count = 0,
  +                   private_key = PrivateKey
                     },
       timer:apply_interval(Interval, ?MODULE, heartbeat, []),
       {ok, State}.
  
positive.code: -record(state,
          {heartbeat_sock,
           heartbeat_interval,
           beat_count}).
  
  %% ------------------------------------------------------------------
  %% API Function Definitions
  
negative.code: handle_call(_Request, _From, State) ->
      {noreply, ok, State}.
  
  handle_cast(heartbeat,
      #state{heartbeat_sock=HeartbeatSock, beat_count=Count, private_key=PrivateKey}=State) ->
      {ok, Hostname} = inet:gethostname(),
      Msg = {[{server, list_to_binary(Hostname)},
              {timestamp, list_to_binary(httpd_util:rfc1123_date())},
              {type, heartbeat}]},
      JsonMsg = jiffy:encode(Msg),
      % Header w/ sig
      erlzmq:send(HeartbeatSock, generate_signed_header(PrivateKey, JsonMsg), [sndmore]),
      % JSON body
      erlzmq:send(HeartbeatSock, JsonMsg),
      ?debugVal(JsonMsg),
      {noreply, State#state{beat_count=Count+1}};
  handle_cast(_Msg, State) ->
      {noreply, State}.
  