I lost my first post as I was on a different computer, so I'm posting an update of my relevant files here as I see it my relevant files are:
package DMU::Controller::Servers;
use strict;
use warnings;
use Data::Dump qw(dump);
use base 'Catalyst::Controller';
=head1 NAME
DMU::Controller::Servers - Catalyst Controller
=head1 DESCRIPTION
Catalyst Controller.
=head1 METHODS
=cut
=head2 index
=cut
sub get_db_types : Local {
my ( $self, $c ) = @_;
my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_type'} ],as => [ 'db_type' ],order_by=>'db_type'});
my @responses;
while(my $server=$rs->next) {
my $db_type=$server->db_type;
push(@responses,"[\"$db_type\",\"$db_type\"]");
}
my $response="[ ".join(",",@responses)." ]";
$c->response->body($response);
}
sub get_db_names : Local {
my ( $self, $c ) = @_;
my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_name'} ],as => [ 'db_name' ],order_by=>'db_name'});
my @responses;
while(my $server=$rs->next) {
my $db_name=$server->db_name;
push(@responses,"[\"$db_name\",\"$db_name\"]");
}
my $response="[ ".join(",",@responses)." ]";
$c->response->body($response);
}
sub get_user_roles : Local {
my ( $self, $c ) = @_;
my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'user_role'} ],as => [ 'user_role' ],order_by=>'user_role'});
my @responses;
while(my $server=$rs->next) {
my $user_role=$server->user_role;
push(@responses,"[\"$user_role\",\"$user_role\"]");
}
my $response="[ ".join(",",@responses)." ]";
$c->response->body($response);
}
sub get_db_servers : Local {
my ( $self, $c ) = @_;
my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_server'} ],as => [ 'db_server' ],order_by=>'db_server'});
my @responses;
while(my $server=$rs->next) {
my $db_server=$server->db_server;
push(@responses,"[\"$db_server\",\"$db_server\"]");
}
my $response="[ ".join(",",@responses)." ]";
$c->response->body($response);
}
sub get_systems : Local {
my ( $self, $c ) = @_;
my $rs=$c->model('DMU::Systems')->search({},{cols=>[qw /db_server db_name/],group_by=>[qw /db_server db_name/]});
my @responses;
while(my $server=$rs->next) {
my $db_server=$server->db_server;
my $db_name=$server->db_name;
push(@responses,"[\"$db_server\",\"$db_name\"]");
}
my $response="[ ".join(",",@responses)." ]";
$c->response->body($response);
}
sub get_aliass : Local {
my ( $self, $c ) = @_;
my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'alias'} ],as => [ 'alias' ],order_by=>'alias'});
my @responses;
while(my $server=$rs->next) {
my $alias=$server->alias;
push(@responses,"[\"$alias\",\"$alias\"]");
}
my $response="[ ".join(",",@responses)." ]";
$c->response->body($response);
}
sub add_server : Local {
my ( $self, $c ) = @_;
my $params=$c->req->params();
my $primary={db_server=>undef,db_name=>undef,db_server=>undef,db_type=>undef,user_role=>undef};
my @errors;
while(my ($k,$v)=each(%{$primary})) {
if(${$params}{$k} ne '') {
${$primary}{$k}=${$params}{$k};
}else {
push(@errors,$k);
}
}
if(@errors) {
my $response="[".join(",",@errors)." ]";
$c->response->body($response); #return missing fields
return;
}
dump($primary);
${$primary}{alias}=${$params}{alias};
dump($primary);
my @rs=$c->model('DMU::Systems')->search($primary)->all();
if(@rs){
$c->response->body(0); #record exists
return;
}
if($c->model('DMU::Systems')->create($primary)) {
$c->response->body(1);
return;
}
}
sub index : Private {
my ( $self, $c ) = @_;
$c->stash->{template}='servers.tt'
#$c->response->body('Matched DMU::Controller::Servers in Servers.');
}
=head1 AUTHOR
root
=head1 LICENSE
This library is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
1;
servers.tt
Description: root/servers.tt
dmu.js
Description: /root/servers/static/javascript/dmu.js
So questions that arise about best practice are:
I followed the thread about Modeling and keeping the business logic out of the
controller, and in the model instead. I'm not sure I completely followed it,
and would like to regurgitate it here. I think that this is not best practice
(from Servers.pm file above):
sub get_db_names : Local {
my ( $self, $c ) = @_;
my $rs=$c->model('DMU::Systems')->search({},{select=> [ {distinct=>'db_name'}
],as => [ 'db_name' ],order_by=>'db_name'});
my @responses;
while(my $server=$rs->next) {
my $db_name=$server->db_name;
push(@responses,"[\"$db_name\",\"$db_name\"]");
}
my $response="[ ".join(",",@responses)." ]";
$c->response->body($response);
}
My understanding is that the stuff in the middle could and should be
tucked away in the ./lib/dmu/Model/DMU.pm. Can anyone verify this?
I have a get_db_servers which returns a list of db_servers (localhost,
etc.). Then I want to create a distinct list of db_servers and
db_names (DMU,mysql,test,etc) and turn the databases into hyperlinks
to my next controller named Databases.pm. To do this I write a
function called get_systems? I suppose much of this is stylistic and
user preference, but I'll ask anyway: Should I instead write a complex
function to handle a more then one call? My experience tells me lots
of little ones are better, but if some one has some work horse of a
function that has multiple functions, I'd be interested in seeing it.
I can and will add a notion of parameters to filter the lists.
The javascript is tedious, is there a better way? I do like dojo as
I'm getting my dojo fairing legs.
Thanks,
Mojo
_______________________________________________ List: [email protected] Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
