Changeset 733 for trunk/DNSDB.pm
- Timestamp:
- 06/23/16 16:52:59 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/DNSDB.pm
r732 r733 4812 4812 # Get a count of log entries 4813 4813 # Takes a database handle and a hash containing at least: 4814 # - Entity IDand entity type as the primary log "slice"4814 # - Entity identifier and entity type as the primary log "slice" 4815 4815 sub getLogCount { 4816 4816 my $self = shift; 4817 my $dbh = $self->{dbh}; 4818 4819 my %args = @_; 4820 4821 my @filterargs; 4822 ##fixme: which fields do we want to filter on? 4823 # push @filterargs, 4824 4825 $errstr = 'Missing primary parent ID and/or type'; 4826 # fail early if we don't have a "prime" ID to look for log entries for 4827 return if !$args{id}; 4828 4829 # or if the prime id type is missing or invalid 4830 return if !$args{logtype}; 4831 $args{logtype} = 'revzone' if $args{logtype} eq 'rdns'; # hack pthui 4832 $args{logtype} = 'domain' if $args{logtype} eq 'dom'; # hack pthui 4833 return if !grep /^$args{logtype}$/, ('group', 'domain', 'revzone', 'user'); 4834 4835 my $sql = "SELECT count(*) FROM log ". 4836 "WHERE $id_col{$args{logtype}}=?". 4837 ($args{filter} ? " AND entry ~* ?" : ''); 4838 my ($count) = $dbh->selectrow_array($sql, undef, ($args{id}, @filterargs) ); 4839 $errstr = $dbh->errstr if !$count; 4840 return $count; 4817 return $self->getLogEntries(@_, count => 1); 4841 4818 } # end getLogCount() 4842 4819 … … 4845 4822 # Get a list of log entries 4846 4823 # Takes arguments as with getLogCount() above, plus optional: 4824 # - "count" flag 4825 # OR 4847 4826 # - sort field 4848 4827 # - sort order … … 4856 4835 my @filterargs; 4857 4836 4858 # fail early if we don't have a "prime" ID to look for log entries for 4859 return if !$args{id}; 4860 4861 # or if the prime id type is missing or invalid 4837 # fail if the prime id type is missing or invalid 4838 $errstr = "Missing primary log slice type"; 4862 4839 return if !$args{logtype}; 4863 4840 $args{logtype} = 'revzone' if $args{logtype} eq 'rdns'; # hack pthui 4864 4841 $args{logtype} = 'domain' if $args{logtype} eq 'dom'; # hack pthui 4842 $errstr = "Invalid primary log slice type"; 4865 4843 return if !grep /^$args{logtype}$/, ('group', 'domain', 'revzone', 'user'); 4844 4845 # fail if we don't have a prime ID to look for log entries for 4846 $errstr = "Missing ID for primary log slice"; 4847 return if !($args{id} || $args{fname}); 4866 4848 4867 4849 # Sorting defaults … … 4870 4852 $args{offset} = 0 if !$args{offset} || $args{offset} !~ /^(?:all|\d+)$/; 4871 4853 4872 my %sortmap = (fname => 'name', username => 'email', entry => 'entry', stamp => 'stamp'); 4854 my %sortmap = (fname => 'name', username => 'email', entry => 'entry', stamp => 'stamp', 4855 revzone => 'revnet', domain => 'domain'); 4873 4856 $args{sortby} = $sortmap{$args{sortby}}; 4874 4857 4875 my $sql = "SELECT user_id AS userid, email AS useremail, name AS userfname, entry AS logentry, ". 4876 "date_trunc('second',stamp) AS logtime ". 4877 "FROM log ". 4878 "WHERE $id_col{$args{logtype}}=?". 4879 ($args{filter} ? " AND entry ~* ?" : ''). 4880 " ORDER BY $args{sortby} $args{sortorder}, log_id $args{sortorder}". 4858 push @filterargs, $args{filter} if $args{filter}; 4859 my $sql; 4860 if ($args{count}) { 4861 $sql = "SELECT count(*) FROM log l "; 4862 } else { 4863 $sql = "SELECT l.user_id AS userid, l.name AS userfname, d.domain, l.domain_id, r.revnet AS revzone, ". 4864 "l.rdns_id, l.entry AS logentry, date_trunc('second',l.stamp) AS logtime ". 4865 "FROM log l ". 4866 "LEFT JOIN domains d ON l.domain_id = d.domain_id ". 4867 "LEFT JOIN revzones r ON l.rdns_id = r.rdns_id "; 4868 } 4869 4870 # decide which ID argument to use. Only use the "full name" if no normal ID is present 4871 my $idarg; 4872 if ($args{id}) { 4873 $sql .= "WHERE l.$id_col{$args{logtype}} = ? "; 4874 $idarg = $args{id}; 4875 } else { 4876 $sql .= "WHERE l.name = ? "; 4877 $idarg = $args{fname}; 4878 } 4879 4880 # add the entry filter, if any 4881 $sql .= ($args{filter} ? " AND entry ~* ?" : ''); 4882 4883 # Limit scope based on group. Mainly useful for ltype==user, so subgroup 4884 # users can see what the deities in parent groups have done to their domains. 4885 if ($args{group} != 1) { 4886 my @grouplist; 4887 $self->getChildren($args{group}, \@grouplist); 4888 my $groupset = join(',', $args{group}, @grouplist); 4889 $sql .= " AND l.group_id IN ($groupset)"; 4890 } 4891 4892 if ($args{count}) { 4893 my ($count) = $dbh->selectrow_array($sql, undef, ($idarg, @filterargs) ); 4894 $errstr = $dbh->errstr if !$count; 4895 return $count; 4896 } else { 4897 $sql .= " ORDER BY $args{sortby} $args{sortorder}, log_id $args{sortorder}". 4881 4898 ($args{offset} eq 'all' ? '' : " LIMIT $self->{perpage} OFFSET ".$args{offset}*$self->{perpage}); 4882 my $loglist = $dbh->selectall_arrayref($sql, { Slice => {} }, ($args{id}, @filterargs) ); 4883 $errstr = $dbh->errstr if !$loglist; 4884 return $loglist; 4899 my $loglist = $dbh->selectall_arrayref($sql, { Slice => {} }, ($idarg, @filterargs) ); 4900 $errstr = $dbh->errstr if !$loglist; 4901 return $loglist; 4902 } 4903 4904 # Your llama is on fire 4905 4885 4906 } # end getLogEntries() 4886 4907
Note:
See TracChangeset
for help on using the changeset viewer.