Changeset fa4c773


Ignore:
Timestamp:
Oct 16, 2017, 1:32:29 PM (7 years ago)
Author:
Adam Glasgall <glasgall@mit.edu>
Children:
5afbccf
Parents:
cb463cd
git-author:
Adam Glasgall <glasgall@mit.edu> (06/11/14 10:24:09)
git-committer:
Adam Glasgall <glasgall@mit.edu> (10/16/17 13:32:29)
Message:
fix retries in Zulip module
File:
1 edited

Legend:

Unmodified
Added
Removed
  • perl/modules/Zulip/lib/BarnOwl/Module/Zulip.pm

    rcb463cd rfa4c773  
    88our $last_event_id;
    99our %cfg;
    10 our $max_retries = 5;
     10our $max_retries = 1000;
     11our $retry_timer;
    1112
    1213use AnyEvent;
     
    115116}
    116117
     118sub parse_response {
     119    my ($body, $headers) = @_;
     120    if($headers->{Status} > 399) {
     121        return 0;
     122    }
     123    my $response = decode_json($body);
     124    if($response->{result} ne "success") {
     125        return 0;
     126    }
     127    return $response;
     128}
    117129sub do_poll {
    118130    my $uri = URI->new($cfg{'api_url'} . "/events");
     
    123135    $callback = sub {
    124136        my ($body, $headers) = @_;
    125         if($headers->{Status} > 399) {
    126             warn "Failed to poll for events: $headers->{Reason}";
    127             BarnOwl::debug($body);
     137        my $response = parse_response($body, $headers);
     138        if(!$response) {
     139            warn "Failed to poll for events in do_poll: $headers->{Reason}";
    128140            if($retry_count >= $max_retries) {
     141                warn "Retry count exceeded in do_poll, giving up";
    129142                fail("do_poll: Giving up");
    130143            } else {
     144                warn "Retrying";
    131145                $retry_count++;       
    132                 http_get($uri->as_string,
    133                                    "headers" => { "Authorization" => authorization },
    134                                    $callback);
     146                $retry_timer = AnyEvent->timer(after => 10, cb => sub { warn "retry number $retry_count";
     147                                                         http_get($uri->as_string,
     148                                                                  "headers" => { "Authorization" => authorization },
     149                                                                  $callback);
     150                                                         return;
     151                                });
    135152                return;
    136153            }
    137154        } else {
    138             event_cb($body, $headers);
     155            event_cb($response);
    139156        }
    140157    };
     
    144161
    145162sub event_cb {
    146     my ($body, $headers) = @_;
    147     my $response = decode_json($body);
     163    my $response = $_[0];
    148164    if($response->{result} ne "success") {
    149         fail("Failed to poll for events; error was $response->{msg}");
     165        fail("event_cb: Failed to poll for events; error was $response->{msg}");
    150166    } else {
    151167        for my $event (@{$response->{events}}) {
     
    165181                    zid => $msg->{id},
    166182                    sender_full_name => $msg->{sender_full_name});
     183                $msghash{'body'} =~ s/\r//gm;
    167184                if($msg->{type} eq "private") {
    168185                    $msghash{private} = 1;
Note: See TracChangeset for help on using the changeset viewer.