* Storage model provides with a layer for more than one
DBIx::Class connection and handles them, currently only
first connection is supported.
* Storage model also uses different DSN than the DB model
* Callflows use the Storage model to fetch captured dialogs
Change-Id: I6e742b7a7f1f9f047ca68ea75f6eea01349c8664
changes/94/21494/2
parent
6e8dd1a2a1
commit
8f28e18ba3
@ -0,0 +1,63 @@
|
||||
package NGCP::Panel::Model::Storage;
|
||||
use Sipwise::Base;
|
||||
use Moose;
|
||||
use XML::Simple;
|
||||
use NGCP::Schema;
|
||||
|
||||
use parent 'Catalyst::Component';
|
||||
|
||||
__PACKAGE__->config(
|
||||
connectors => [],
|
||||
);
|
||||
|
||||
has connectors => (
|
||||
is => 'rw',
|
||||
);
|
||||
|
||||
sub COMPONENT {
|
||||
my ($class, $app, $args) = @_;
|
||||
$args = $class->merge_config_hashes($class->config, $args);
|
||||
my $self = $class->new($app, $args);
|
||||
$self->connect_storage();
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub get_config_filename {
|
||||
return '/etc/ngcp-panel/provisioning.conf';
|
||||
}
|
||||
|
||||
sub add_connector {
|
||||
my ($self, $conn) = @_;
|
||||
|
||||
$self->connectors([@{$self->connectors // []},
|
||||
NGCP::Schema->connect($conn)]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub connect_storage {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
unless (@{$self->config->{connectors}}) {
|
||||
my $conf = XML::Simple->new->XMLin(get_config_filename(), ForceArray => 1);
|
||||
if ($conf && $conf->{ngcp_storage_info}) {
|
||||
my $connectors = $conf->{ngcp_storage_info}->[0]->{connectors} // [];
|
||||
map { $self->add_connector($_); } @$connectors;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub resultset {
|
||||
my ($self, $rs) = @_;
|
||||
|
||||
return unless $self->connectors->[0];
|
||||
|
||||
# TODO: only one is used now, support multiple storages at once
|
||||
return $self->connectors->[0]->resultset($rs);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set tabstop=4 expandtab
|
||||
Loading…
Reference in new issue