From ff75e75138bc9bd4e4310726de38bd239facd94e Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Thu, 20 Aug 2015 16:07:43 +0200 Subject: [PATCH] MT#14317 add debug info of panel interval catchups Change-Id: I1d37ec624c6642f54187ba463cf1121df4eb19a4 --- lib/NGCP/Panel/Controller/Root.pm | 3 ++- lib/NGCP/Panel/Utils/DateTime.pm | 2 ++ lib/NGCP/Panel/Utils/ProfilePackages.pm | 4 +++- t/api-balanceintervals.t | 30 +++++++++++++------------ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Root.pm b/lib/NGCP/Panel/Controller/Root.pm index 26bafa65f0..65a358245d 100644 --- a/lib/NGCP/Panel/Controller/Root.pm +++ b/lib/NGCP/Panel/Controller/Root.pm @@ -292,7 +292,8 @@ sub api_apply_fake_time :Private { if ($allow_fake_client_time) { #exists $ENV{API_FAKE_CLIENT_TIME} && $ENV{API_FAKE_CLIENT_TIME}) { my $date = $c->request->header('X-Fake-Clienttime'); #('Date'); if ($date) { - my $dt = NGCP::Panel::Utils::DateTime::from_rfc1123_string($date); + #my $dt = NGCP::Panel::Utils::DateTime::from_rfc1123_string($date); + my $dt = NGCP::Panel::Utils::DateTime::from_string($date); if ($dt) { NGCP::Panel::Utils::DateTime::set_fake_time($dt); $c->stash->{is_fake_time} = 1; diff --git a/lib/NGCP/Panel/Utils/DateTime.pm b/lib/NGCP/Panel/Utils/DateTime.pm index c9819559c2..b56a9793f4 100644 --- a/lib/NGCP/Panel/Utils/DateTime.pm +++ b/lib/NGCP/Panel/Utils/DateTime.pm @@ -126,6 +126,7 @@ sub from_rfc1123_string { my $s = shift; my $strp = DateTime::Format::Strptime->new(pattern => RFC_1123_FORMAT_PATTERN, + locale => 'en_US', on_error => 'undef'); return $strp->parse_datetime($s); @@ -170,6 +171,7 @@ sub to_rfc1123_string { my $dt = shift; my $strp = DateTime::Format::Strptime->new(pattern => RFC_1123_FORMAT_PATTERN, + locale => 'en_US', on_error => 'undef'); return $strp->format_datetime($dt); diff --git a/lib/NGCP/Panel/Utils/ProfilePackages.pm b/lib/NGCP/Panel/Utils/ProfilePackages.pm index 0c098b436d..31c96b9664 100644 --- a/lib/NGCP/Panel/Utils/ProfilePackages.pm +++ b/lib/NGCP/Panel/Utils/ProfilePackages.pm @@ -148,12 +148,14 @@ sub resize_actual_contract_balance { sub catchup_contract_balances { my %params = @_; my($c,$contract,$old_package,$now,$schema) = @params{qw/c contract old_package now schema/}; - + $schema //= $c->model('DB'); $contract = $schema->resultset('contracts')->find({id => $contract->id},{for => 'update'}); #lock record $now //= $contract->modify_timestamp; $old_package = $contract->profile_package if !exists $params{old_package}; + $c->log->debug('catchup contract ' . $contract->id . ' contract_balances to now - ' . NGCP::Panel::Utils::DateTime::to_string($now)) if $c; + my ($start_mode,$interval_unit,$interval_value,$carry_over_mode,$has_package,$notopup_expiration); if (defined $contract->contact->reseller_id && $old_package) { diff --git a/t/api-balanceintervals.t b/t/api-balanceintervals.t index 9b7dce1e16..0839c3e294 100644 --- a/t/api-balanceintervals.t +++ b/t/api-balanceintervals.t @@ -654,7 +654,7 @@ if (_get_allow_fake_client_time() && $enable_profile_packages) { my $nexturi = $uri.'/api/balanceintervals/?page=1&rows=' . ((not defined $total_count or $total_count <= 2) ? 2 : $total_count - 1) . '&contact_id='.$custcontact->{id}; do { $req = HTTP::Request->new('GET',$nexturi); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; $res = $ua->request($req); #$res = $ua->get($nexturi); @@ -697,7 +697,7 @@ if (_get_allow_fake_client_time() && $enable_profile_packages) { #ok(exists $journals->{$journal->{href}},"check page journal item link"); $req = HTTP::Request->new('GET',$uri . $interval_link->{href}); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; $res = $ua->request($req); @@ -737,7 +737,7 @@ sub _check_interval_history { my $nexturi = $uri.'/api/balanceintervals/'.$customer->{id}.'/?page=1&rows=10&order_by_direction=asc&order_by=start'.$limit; do { $req = HTTP::Request->new('GET',$nexturi); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; $res = $ua->request($req); #$res = $ua->get($nexturi); @@ -781,7 +781,7 @@ sub _check_interval_history { # #ok(exists $journals->{$journal->{href}},"check page journal item link"); # # $req = HTTP::Request->new('GET',$uri . $interval_link->{href}); - # $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + # $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); # $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; # $res = $ua->request($req); # is($res->code, 200, $label . "fetch page balance interval item"); @@ -866,7 +866,7 @@ sub _fetch_intervals_worker { my ($delay,$sort_column,$dir) = @_; diag("starting thread " . threads->tid() . " ..."); $req = HTTP::Request->new('GET', $uri.'/api/balanceintervals/?order_by='.$sort_column.'&order_by_direction='.$dir.'&contact_id='.$custcontact->{id}.'&rows='.(scalar keys %customer_map)); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; $req->header('X-Delay-Commit' => $delay); $res = $ua->request($req); @@ -897,7 +897,7 @@ sub _create_customer { my ($package,$record_label) = @_; $req = HTTP::Request->new('POST', $uri.'/api/customers/'); $req->header('Content-Type' => 'application/json'); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; my $req_data = { status => "active", @@ -915,7 +915,7 @@ sub _create_customer { is($res->code, 201, "create " . $label); my $request = $req; $req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location')); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; $res = $ua->request($req); is($res->code, 200, "fetch " . $label); @@ -932,7 +932,7 @@ sub _switch_package { $req = HTTP::Request->new('PATCH', $uri.'/api/customers/'.$customer->{id}); $req->header('Prefer' => 'return=representation'); $req->header('Content-Type' => 'application/json-patch+json'); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; $req->content(JSON::to_json( @@ -963,8 +963,10 @@ sub _set_time { } } -sub _get_rfc_1123_now { - return NGCP::Panel::Utils::DateTime::to_rfc1123_string(NGCP::Panel::Utils::DateTime::current_local); +sub _get_fake_clienttime_now { + #return NGCP::Panel::Utils::DateTime::to_rfc1123_string(NGCP::Panel::Utils::DateTime::current_local); + #with rfc1123 there could be a problem if jenkins runner and test host will not have the same (language) locale + return NGCP::Panel::Utils::DateTime::to_string(NGCP::Panel::Utils::DateTime::current_local); } sub _create_profile_package { @@ -973,7 +975,7 @@ sub _create_profile_package { $req = HTTP::Request->new('POST', $uri.'/api/profilepackages/'); $req->header('Content-Type' => 'application/json'); $req->header('Prefer' => 'return=representation'); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; my $name = $start_mode . ($interval_unit ? '/' . $interval_value . ' ' . $interval_unit : ''); $req->content(JSON::to_json({ @@ -991,7 +993,7 @@ sub _create_profile_package { is($res->code, 201, "POST test profilepackage - '" . $name . "'"); my $profilepackage_uri = $uri.'/'.$res->header('Location'); $req = HTTP::Request->new('GET', $profilepackage_uri); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; $res = $ua->request($req); is($res->code, 200, "fetch POSTed profilepackage - '" . $name . "'"); @@ -1262,7 +1264,7 @@ sub _perform_topup_voucher { my ($subscriber,$voucher) = @_; $req = HTTP::Request->new('POST', $uri.'/api/topupvouchers/'); $req->header('Content-Type' => 'application/json'); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; my $req_data = { code => $voucher->{code}, @@ -1280,7 +1282,7 @@ sub _perform_topup_cash { my ($subscriber,$amount,$package) = @_; $req = HTTP::Request->new('POST', $uri.'/api/topupcash/'); $req->header('Content-Type' => 'application/json'); - $req->header('X-Fake-Clienttime' => _get_rfc_1123_now()); + $req->header('X-Fake-Clienttime' => _get_fake_clienttime_now()); $req->header('X-Request-Identifier' => $req_identifier) if $req_identifier; my $req_data = { amount => $amount * 100.0,