Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.

Commit 038cc0c

Browse files
feat(logger): possibility to override debug mode's default logging mechanism. See README.md
1 parent 38e8372 commit 038cc0c

File tree

7 files changed

+141
-12
lines changed

7 files changed

+141
-12
lines changed

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ This module is a connector library for the insanely fast HEXONET Backend API. Fo
2020
* Automatic IDN Domain name conversion to punycode (our API accepts only punycode format in commands)
2121
* Allows nested associative arrays in API commands to improve for bulk parameters
2222
* Connecting and communication with our API
23+
* Possibility to use a custom mechanism for debug mode
2324
* Several ways to access and deal with response data
2425
* Getting the command again returned together with the response
2526
* Sessionless communication
@@ -113,6 +114,27 @@ e.g. `$cl->setURL('http://127.0.0.1:8765/api/call.cgi');` would change the port.
113114

114115
Don't use `https` for that setup as it leads to slowing things down as of the https `overhead` of securing the connection. In this setup we just connect to localhost, so no direct outgoing network traffic using `http`. The apache configuration finally takes care passing it to `https` for the final communication to the HEXONET API.
115116

117+
### Customize Logging / Outputs
118+
119+
When having the debug mode activated `WebService::Hexonet::Connector::Logger` will be internally used for doing outputs.
120+
Of course it could be of interest for integrators to look for a way of getting this replaced by a custom mechanism like forwarding things to a 3rd-party software, logging into file or whatever.
121+
122+
```perl
123+
use 5.026_000;
124+
use strict;
125+
use warnings;
126+
use WebService::Hexonet::Connector;
127+
use MyCustomLogger::Logger;
128+
129+
my $cl = WebService::Hexonet::Connector::APIClient->new();
130+
$cl->enableDebugMode() # activate debug outputs/logging
131+
$cl->setCustomLogger(MyCustomLogger::Logger->new()) # set your own mechanism by providing your own class
132+
$cl->setCredentials('test.user', 'test.passw0rd');
133+
my $response = $cl->request({ COMMAND => "StatusAccount" });
134+
```
135+
136+
NOTE: Find an example for a logger class implementation plus POD documentation in `lib/WebService/Hexonet/Connector/Logger.pm`. If you have questions, feel free to open a github issue.
137+
116138
### Usage Examples
117139

118140
Please have an eye on our [HEXONET Backend API documentation](https://github.com/hexonet/hexonet-api-documentation/tree/master/API). Here you can find information on available Commands and their response data.

lib/WebService/Hexonet/Connector/APIClient.pm

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use 5.026_000;
44
use strict;
55
use warnings;
66
use utf8;
7+
use WebService::Hexonet::Connector::Logger;
78
use WebService::Hexonet::Connector::Response;
89
use WebService::Hexonet::Connector::ResponseTemplateManager;
910
use WebService::Hexonet::Connector::SocketConfig;
@@ -31,10 +32,28 @@ sub new {
3132
debugMode => 0,
3233
socketConfig => WebService::Hexonet::Connector::SocketConfig->new(),
3334
ua => q{},
34-
curlopts => {}
35+
curlopts => {},
36+
logger => WebService::Hexonet::Connector::Logger->new()
3537
}, $class;
3638
$self->setURL($ISPAPI_CONNECTION_URL);
3739
$self->useLIVESystem();
40+
$self->setDefaultLogger();
41+
return $self;
42+
}
43+
44+
45+
sub setDefaultLogger {
46+
my $self = shift;
47+
$self->{logger} = WebService::Hexonet::Connector::Logger->new();
48+
return $self;
49+
}
50+
51+
52+
sub setCustomLogger {
53+
my ( $self, $logger ) = shift;
54+
if ( defined($logger) && $logger->can('log') ) {
55+
$self->{logger} = $logger;
56+
}
3857
return $self;
3958
}
4059

@@ -314,22 +333,17 @@ sub request {
314333

315334
my $r = $ua->post( $cfg->{CONNECTION_URL}, $post );
316335
if ( $r->is_success ) {
317-
$r = $r->decoded_content;
336+
$r = WebService::Hexonet::Connector::Response->new( $r->decoded_content, $newcmd, $cfg );
318337
if ( $self->{debugMode} ) {
319-
print {*STDOUT} Dumper($newcmd);
320-
print {*STDOUT} Dumper($secured);
321-
print {*STDOUT} Dumper($r);
338+
$self->{logger}->log( $secured, $r );
322339
}
323340
} else {
324-
my $err = $r->status_line;
325-
$r = $rtm->getTemplate('httperror')->getPlain();
341+
$r = WebService::Hexonet::Connector::Response->new( $rtm->getTemplate('httperror')->getPlain(), $newcmd, $cfg );
326342
if ( $self->{debugMode} ) {
327-
print {*STDERR} Dumper($newcmd);
328-
print {*STDERR} Dumper($secured);
329-
print {*STDERR} Dumper($r);
343+
$self->{logger}->log( $secured, $r, $r->status_line );
330344
}
331345
}
332-
return WebService::Hexonet::Connector::Response->new( $r, $newcmd, $cfg );
346+
return $r;
333347
}
334348

335349

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package WebService::Hexonet::Connector::Logger;
2+
3+
use 5.026_000;
4+
use strict;
5+
use warnings;
6+
use Data::Dumper;
7+
8+
use version 0.9917; our $VERSION = version->declare('v2.8.1');
9+
10+
11+
sub new {
12+
my ($class) = @_;
13+
return bless {}, $class;
14+
}
15+
16+
17+
sub log {
18+
my ( $self, $post, $r, $error ) = @_;
19+
if ( defined $error ) {
20+
print {*STDERR} Dumper($post);
21+
print {*STDERR} 'HTTP communication failed: ' . $error;
22+
print {*STDERR} Dumper( $r->getCommandPlain() );
23+
print {*STDERR} Dumper( $r->getPlain() );
24+
} else {
25+
print {*STDOUT} Dumper($post);
26+
print {*STDOUT} Dumper( $r->getCommandPlain() );
27+
print {*STDOUT} Dumper( $r->getPlain() );
28+
}
29+
return $self->{data};
30+
}
31+
32+
1;
33+
34+
__END__
35+
36+
=pod
37+
38+
=head1 NAME
39+
40+
WebService::Hexonet::Connector::Logger - Library to cover API request and response data output / logging.
41+
42+
=head1 SYNOPSIS
43+
44+
This module is internally used by the L<WebService::Hexonet::Connector::APIClient|WebService::Hexonet::Connector::APIClient> module.
45+
To be used in the way:
46+
47+
# create a new instance by
48+
$logger = WebService::Hexonet::Connector::Logger->new();
49+
50+
# Log API Request / Response Data
51+
# * specify request data in $data in string format
52+
# * specify an instance of WebService::Hexonet::Connector::Response in $r.
53+
# * specify an error message as string in $error (optional parameter)
54+
$logger->log( $data, $r, $error );
55+
# vs.
56+
$logger->log( $data, $r );
57+
58+
=head1 DESCRIPTION
59+
60+
HEXONET Backend API communication will be printed to STDOUT/STDERR by default.
61+
This mechanism can be overwritten by a CustomLogger implementation.
62+
Use method setCustomLogger of WebService::Hexonet::Connector::APIClient for this.
63+
Important is that a custom implementation provides method `log` and supports all the arguments explained.
64+
65+
=head2 Methods
66+
67+
=over
68+
69+
=item C<new>
70+
71+
Returns a new L<WebService::Hexonet::Connector::Logger|WebService::Hexonet::Connector::Logger> object.
72+
73+
=item C<log($post, $r, $error)>
74+
75+
Log API Request / Response Data
76+
Specify request data in $data in string format
77+
Specify an instance of WebService::Hexonet::Connector::Response in $r.
78+
Specify an error message as string in $error. Optional. Thought for forwarding HTTP errors.
79+
80+
=back
81+
82+
=head1 LICENSE AND COPYRIGHT
83+
84+
This program is licensed under the L<MIT License|https://raw.githubusercontent.com/hexonet/perl-sdk/master/LICENSE>.
85+
86+
=head1 AUTHOR
87+
88+
L<HEXONET GmbH|https://www.hexonet.net>
89+
90+
=cut

scripts/generatedocs.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ perldoc -oHTML -ddocs/connector.html WebService::Hexonet::Connector
55
perldoc -oHTML -ddocs/apiclient.html WebService::Hexonet::Connector::APIClient
66
perldoc -oHTML -ddocs/column.html WebService::Hexonet::Connector::Column
77
perldoc -oHTML -ddocs/record.html WebService::Hexonet::Connector::Record
8+
perldoc -oHTML -ddocs/logger.html WebService::Hexonet::Connector::Logger
89
perldoc -oHTML -ddocs/response.html WebService::Hexonet::Connector::Response
910
perldoc -oHTML -ddocs/responseparser.html WebService::Hexonet::Connector::ResponseParser
1011
perldoc -oHTML -ddocs/responsetemplate.html WebService::Hexonet::Connector::ResponseTemplate

scripts/perltidy.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ perltidy -pro=.perltidyrc lib/WebService/Hexonet.pm
44
perltidy -pro=.perltidyrc lib/WebService/Hexonet/Connector.pm
55
perltidy -pro=.perltidyrc lib/WebService/Hexonet/Connector/APIClient.pm
66
perltidy -pro=.perltidyrc lib/WebService/Hexonet/Connector/Column.pm
7+
perltidy -pro=.perltidyrc lib/WebService/Hexonet/Connector/Logger.pm
78
perltidy -pro=.perltidyrc lib/WebService/Hexonet/Connector/Record.pm
89
perltidy -pro=.perltidyrc lib/WebService/Hexonet/Connector/Response.pm
910
perltidy -pro=.perltidyrc lib/WebService/Hexonet/Connector/ResponseParser.pm

scripts/podchecker.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#!/bin/bash
22
cd lib/WebService || exit
3-
podchecker Hexonet.pm Hexonet/Connector.pm Hexonet/Connector/APIClient.pm Hexonet/Connector/Column.pm Hexonet/Connector/Record.pm Hexonet/Connector/Response.pm Hexonet/Connector/ResponseParser.pm Hexonet/Connector/ResponseTemplate.pm Hexonet/Connector/ResponseTemplateManager.pm Hexonet/Connector/SocketConfig.pm
3+
podchecker Hexonet.pm Hexonet/Connector.pm Hexonet/Connector/APIClient.pm Hexonet/Connector/Column.pm Hexonet/Connector/Logger.pm Hexonet/Connector/Record.pm Hexonet/Connector/Response.pm Hexonet/Connector/ResponseParser.pm Hexonet/Connector/ResponseTemplate.pm Hexonet/Connector/ResponseTemplateManager.pm Hexonet/Connector/SocketConfig.pm
44
cd ../.. || exit

updateVersion.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g
1212
sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g" lib/WebService/Hexonet/Connector.pm
1313
sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g" lib/WebService/Hexonet/Connector/APIClient.pm
1414
sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g" lib/WebService/Hexonet/Connector/Column.pm
15+
sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g" lib/WebService/Hexonet/Connector/Logger.pm
1516
sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g" lib/WebService/Hexonet/Connector/Record.pm
1617
sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g" lib/WebService/Hexonet/Connector/Response.pm
1718
sed -i "s/declare('v[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+')/declare('v${newversion}')/g" lib/WebService/Hexonet/Connector/ResponseParser.pm

0 commit comments

Comments
 (0)