Changeset 744 for trunk/DNSDB.pm


Ignore:
Timestamp:
08/29/16 16:16:13 (8 years ago)
Author:
Kris Deugau
Message:

/trunk

Finally commit extension of log records to tuck "child" entries (ie,
new record in new zone, or mergerec's --detail argument) entries in
as subrecords of a parent, along with a bit of UI chrome to hide them.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/DNSDB.pm

    r741 r744  
    146146                domain  => 'domain_id',
    147147                revzone => 'rdns_id',
    148                 record  => 'record_id'
     148                record  => 'record_id',
    149149        );
    150150my %par_col = (
     
    456456#  group_id, log entry
    457457# and optionally one or more of:
    458 #  domain_id, rdns_id
     458#  domain_id, rdns_id, logparent
    459459# The %userdata hash provides the user ID, username, and fullname
     460# Returns the log entry ID, mainly for use in bulk operations to allow a "parent" log entry
     461# and a set of child entries (eg, domain add and the individual default-record-copy entries)
    460462sub _log {
    461463  my $self = shift;
     
    466468  $args{rdns_id} = 0 if !$args{rdns_id};
    467469  $args{domain_id} = 0 if !$args{domain_id};
     470  $args{logparent} = 0 if !$args{logparent};
    468471
    469472##fixme:  farm out the actual logging to different subs for file, syslog, internal, etc based on config
    470473#  if ($self->{log_channel} eq 'sql') {
    471   $dbh->do("INSERT INTO log (domain_id,rdns_id,group_id,entry,user_id,email,name) VALUES (?,?,?,?,?,?,?)",
     474  $dbh->do("INSERT INTO log (domain_id,rdns_id,group_id,logparent,entry,user_id,email,name) ".
     475        "VALUES (?,?,?,?,?,?,?,?)",
    472476        undef,
    473         ($args{domain_id}, $args{rdns_id}, $args{group_id}, $args{entry},
     477        ($args{domain_id}, $args{rdns_id}, $args{group_id}, $args{logparent}, $args{entry},
    474478                $self->{loguserid}, $self->{logusername}, $self->{logfullname}) );
     479
     480  my ($log_id) = $dbh->selectrow_array("SELECT currval('log_log_id_seq')");
     481  return $log_id;
     482
    475483#  } elsif ($self->{log_channel} eq 'file') {
    476484#  } elsif ($self->{log_channel} eq 'syslog') {
     
    23742382        undef, ($domain, $defloc));
    23752383
    2376     $self->_log(domain_id => $dom_id, group_id => $group,
     2384    my $logparent = $self->_log(domain_id => $dom_id, group_id => $group,
    23772385        entry => "Added ".($state ? 'active' : 'inactive')." domain $domain");
    23782386
     
    23902398        my @tmp1 = split /:/, $host;
    23912399        my @tmp2 = split /:/, $val;
    2392         $self->_log(domain_id => $dom_id, group_id => $group,
     2400        $self->_log(domain_id => $dom_id, group_id => $group, logparent => $logparent,
    23932401                entry => "[new $domain] Added SOA record [contact $tmp1[0]] [master $tmp1[1]] ".
    23942402                "[refresh $tmp2[0]] [retry $tmp2[1]] [expire $tmp2[2]] [minttl $tmp2[3]], TTL $ttl");
     
    23972405        $logentry .= " [distance $dist]" if $typemap{$type} eq 'MX';
    23982406        $logentry .= " [priority $dist] [weight $weight] [port $port]" if $typemap{$type} eq 'SRV';
    2399         $self->_log(domain_id => $dom_id, group_id => $group,
     2407        $self->_log(domain_id => $dom_id, group_id => $group, logparent => $logparent,
    24002408                entry => $logentry." $val', TTL $ttl");
    24012409      }
     
    48674875    $sql = "SELECT count(*) FROM log l ";
    48684876  } else {
    4869     $sql = "SELECT l.user_id AS userid, l.name AS userfname, d.domain, l.domain_id, r.revnet AS revzone, ".
     4877    $sql = "SELECT l.log_id AS logparent, l.user_id AS userid, l.name AS userfname, d.domain, l.domain_id, ".
     4878        "r.revnet AS revzone, ".
    48704879        "l.rdns_id, l.entry AS logentry, date_trunc('second',l.stamp) AS logtime ".
    48714880        "FROM log l ".
     
    48844893  }
    48854894
     4895  # trim log "subentries" - we'll figure out where to stash these later
     4896  $sql .= " AND logparent = 0";
     4897
    48864898  # add the entry filter, if any
    48874899  $sql .= ($args{filter} ? " AND entry ~* ?" : '');
     
    49034915    $sql .= " ORDER BY $args{sortby} $args{sortorder}, log_id $args{sortorder}".
    49044916        ($args{offset} eq 'all' ? '' : " LIMIT $self->{perpage} OFFSET ".$args{offset}*$self->{perpage});
    4905     my $loglist = $dbh->selectall_arrayref($sql, { Slice => {} }, ($idarg, @filterargs) );
    4906     $errstr = $dbh->errstr if !$loglist;
    4907     return $loglist;
     4917    my @loglist;
     4918    my $sth = $dbh->prepare($sql);
     4919    my $logchild = $dbh->prepare("SELECT entry FROM log WHERE logparent = ? ORDER BY log_id");
     4920    $sth->execute($idarg, @filterargs);
     4921    while (my $row = $sth->fetchrow_hashref) {
     4922      $logchild->execute($row->{logparent});
     4923      my $childlist = $logchild->fetchall_arrayref({});
     4924      $row->{childentries} = $childlist;
     4925      push @loglist, $row;
     4926    }
     4927    return \@loglist;
    49084928  }
    49094929
     
    55105530  eval {
    55115531
     5532    my $logparent;
     5533
    55125534    if ($rev eq 'n') {
    55135535##fixme:  serial
     
    55175539      ($zone_id) = $dbh->selectrow_array("SELECT currval('domains_domain_id_seq')");
    55185540      $domain_id = $zone_id;
    5519       $self->_log(group_id => $group, domain_id => $domain_id,
     5541      $logparent = $self->_log(group_id => $group, domain_id => $domain_id,
    55205542                entry => "[Added ".($args{status} ? 'active' : 'inactive')." domain $zone via AXFR]");
    55215543    } else {
     
    55265548      ($zone_id) = $dbh->selectrow_array("SELECT currval('revzones_rdns_id_seq')");
    55275549      $rdns_id = $zone_id;
    5528       $self->_log(group_id => $group, rdns_id => $rdns_id,
     5550      $logparent = $self->_log(group_id => $group, rdns_id => $rdns_id,
    55295551                entry => "[Added ".($args{status} ? 'active' : 'inactive')." reverse zone $cidr via AXFR]");
    55305552    }
     
    57785800        $logentry .= " ".($rev eq 'y' ? $host : $val)."', TTL $ttl";
    57795801      }
    5780       $self->_log(group_id => $group, domain_id => $domain_id, rdns_id => $rdns_id, entry => $logentry);
     5802      $self->_log(group_id => $group, domain_id => $domain_id, rdns_id => $rdns_id,
     5803        logparent => $logparent, entry => $logentry);
    57815804
    57825805    } # while axfr_next
Note: See TracChangeset for help on using the changeset viewer.