-/* $Id: invstat.c,v 1.39 2004-08-06 13:14:46 adam Exp $
- Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
- Index Data Aps
+/* $Id: invstat.c,v 1.53 2006-08-14 10:40:15 adam Exp $
+ Copyright (C) 1995-2006
+ Index Data ApS
This file is part of the Zebra server.
for more details.
You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra. If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
*/
int isam_occurrences[20];
char tmp[128];
int isamb_levels[10][5];
- int isamb_sizes[10];
- int isamb_blocks[10];
+ zint isamb_sizes[10];
+ zint isamb_blocks[10];
unsigned long cksum;
int dumpwords;
};
#define SINGLETON_TYPE 8 /* the type to use for singletons that */
/* have no block and no block type */
-static void print_dict_item (ZebraMaps zm, const char *s, zint count,
+static void print_dict_item (ZebraHandle zh, const char *s, zint count,
int firstsys, int firstseq, int lastsys, int lastseq )
{
- int reg_type = s[1];
- char keybuf[IT_MAX_WORD+1];
- char *to = keybuf;
- const char *from = s + 2;
-
- while (*from)
+ char dst[IT_MAX_WORD+1];
+ int ord;
+ int len = key_SU_decode(&ord, (const unsigned char *) s);
+ int index_type;
+ const char *db = 0;
+
+ if (!zh)
+ *dst = '\0';
+ else
{
- const char *res = zebra_maps_output (zm, reg_type, &from);
- if (!res)
- *to++ = *from++;
- else
- while (*res)
- *to++ = *res++;
+ zebraExplain_lookup_ord (zh->reg->zei, ord, &index_type, &db, 0);
+
+ zebra_term_untrans(zh, index_type, dst, s + len);
}
- *to = '\0';
- /* yaz_log (LOG_LOG, "%s", keybuf); */
- printf("%10" ZINT_FORMAT0 " %s %d.%d - %d.%d\n", count, keybuf,
- firstsys,firstseq, lastsys,lastseq);
+ printf("%02d:%10" ZINT_FORMAT0 " %s %d.%d - %d.%d\n", ord, count, dst,
+ firstsys, firstseq, lastsys, lastseq);
}
static int inv_stat_handle (char *name, const char *info, int pos,
zint occur = 0;
int i = 0;
struct inv_stat_info *stat_info = (struct inv_stat_info*) client;
- ISAMS_P isam_p;
+ ISAM_P isam_p;
int firstsys=-1;
int firstseq=-1;
int lastsys=-1;
stat_info->no_dict_entries++;
stat_info->no_dict_bytes += strlen(name);
- assert (*info == sizeof(ISAMS_P));
- memcpy (&isam_p, info+1, sizeof(ISAMS_P));
+ assert (*info == sizeof(ISAM_P));
+ memcpy (&isam_p, info+1, sizeof(ISAM_P));
if (stat_info->zh->reg->isams)
{
while (isams_pp_read(pp, &key))
{
occurx++;
-#if IT_KEY_NEW
-#else
- stat_info->cksum = stat_info->cksum * 65509 +
- key.sysno + 11 * key.seqno;
- if (-1==firstsys)
- {
- firstseq=key.seqno;
- firstsys=key.sysno;
- }
- lastsys=key.sysno;
- lastseq=key.seqno;
-#endif
}
assert (occurx == occur);
stat_info->no_isam_entries[0] += occur;
zint occurx = 0;
struct it_key key;
- pp = isc_pp_open (stat_info->zh->reg->isamc, isam_p);
- occur = isc_pp_num (pp);
- while (isc_pp_read(pp, &key))
+ pp = isamc_pp_open (stat_info->zh->reg->isamc, isam_p);
+ occur = isamc_pp_num (pp);
+ while (isamc_pp_read(pp, &key))
{
occurx++;
-#if IT_KEY_NEW
-#else
- stat_info->cksum = stat_info->cksum * 65509 +
- key.sysno + 11 * key.seqno;
- if (-1==firstsys)
- {
- firstseq=key.seqno;
- firstsys=key.sysno;
- }
- lastsys=key.sysno;
- lastseq=key.seqno;
-#endif
}
assert (occurx == occur);
- stat_info->no_isam_entries[isc_type(isam_p)] += occur;
- isc_pp_close (pp);
+ stat_info->no_isam_entries[isamc_type(isam_p)] += occur;
+ isamc_pp_close (pp);
}
if (stat_info->zh->reg->isamb)
{
ISAMB_PP pp;
struct it_key key;
- int cat = (int) (isam_p & 3);
+ int cat = CAST_ZINT_TO_INT(isam_p & 3);
int level;
- int size;
- int blocks;
+ zint size;
+ zint blocks;
- pp = isamb_pp_open_x(stat_info->zh->reg->isamb, isam_p, &level);
+ pp = isamb_pp_open_x(stat_info->zh->reg->isamb, isam_p, &level, 0);
while (isamb_pp_read(pp, &key))
{
occur++;
-#if IT_KEY_NEW
-#else
- stat_info->cksum = stat_info->cksum * 65509 +
- key.sysno + 11 * key.seqno;
- if (-1==firstsys)
- {
- firstseq=key.seqno;
- firstsys=key.sysno;
- }
- lastsys=key.sysno;
- lastseq=key.seqno;
-#endif
}
isamb_pp_close_x (pp, &size, &blocks);
stat_info->isamb_blocks[cat] += blocks;
i++;
++(stat_info->isam_occurrences[i]);
if (stat_info->dumpwords)
- print_dict_item(stat_info->zh->reg->zebra_maps, name, occur,
- firstsys,firstseq, lastsys, lastseq);
+ print_dict_item(stat_info->zh, name, occur,
+ firstsys, firstseq, lastsys, lastseq);
return 0;
}
+static void show_bfs_stats(BFiles bfs)
+{
+ int i = 0;
+ const char *directory = 0;
+ double used_bytes, max_bytes;
+ printf("Register:\n");
+ while (bfs_register_directory_stat(bfs, i, &directory,
+ &used_bytes, &max_bytes))
+ {
+ printf ("%s %10.0lf %10.0lf\n", directory, used_bytes, max_bytes);
+ i++;
+ }
+ i = 0;
+ printf("Shadow:\n");
+ while (bfs_shadow_directory_stat(bfs, i, &directory,
+ &used_bytes, &max_bytes))
+ {
+ printf ("%s %10.0lf %10.0lf\n", directory, used_bytes, max_bytes);
+ i++;
+ }
+}
+
int zebra_register_statistics (ZebraHandle zh, int dumpdict)
{
int i, prev;
if (zebra_begin_read (zh))
return 1;
+ show_bfs_stats(zebra_get_bfs(zh));
+
stat_info.zh = zh;
stat_info.dumpwords=dumpdict;
if (zh->reg->isamc)
{
fprintf (stdout, " Blocks Occur Size KB Bytes/Entry\n");
- for (i = 0; isc_block_used (zh->reg->isamc, i) >= 0; i++)
+ for (i = 0; isamc_block_used (zh->reg->isamc, i) >= 0; i++)
{
fprintf (stdout, " %8" ZINT_FORMAT0 " %8" ZINT_FORMAT0,
- isc_block_used (zh->reg->isamc, i),
+ isamc_block_used (zh->reg->isamc, i),
stat_info.no_isam_entries[i]);
if (stat_info.no_isam_entries[i])
- fprintf (stdout, " %8d %f",
- (int) ((1023.0 + (double)
- isc_block_used(zh->reg->isamc, i) *
- isc_block_size(zh->reg->isamc,i))/1024),
- ((double) isc_block_used(zh->reg->isamc, i) *
- isc_block_size(zh->reg->isamc,i))/
- stat_info.no_isam_entries[i]);
+ fprintf(stdout, " %8d %f",
+ (int) ((1023.0 + (double)
+ isamc_block_used(zh->reg->isamc, i) *
+ isamc_block_size(zh->reg->isamc,i))/1024),
+ ((double) isamc_block_used(zh->reg->isamc, i) *
+ isamc_block_size(zh->reg->isamc,i))/
+ stat_info.no_isam_entries[i]);
fprintf (stdout, "\n");
}
}
break;
fprintf (stdout, "Category %d\n", i);
fprintf (stdout, "Block size %d\n", bsize);
- fprintf (stdout, "Blocks: %d\n", stat_info.isamb_blocks[i]);
- fprintf (stdout, "Size: %d\n", stat_info.isamb_sizes[i]);
+ fprintf (stdout, "Blocks: " ZINT_FORMAT "\n", stat_info.isamb_blocks[i]);
+ fprintf (stdout, "Size: " ZINT_FORMAT "\n", stat_info.isamb_sizes[i]);
fprintf (stdout, "Entries: " ZINT_FORMAT "\n",
stat_info.no_isam_entries[i]);
- fprintf (stdout, "Total %d\n", stat_info.isamb_blocks[i]*
+ fprintf (stdout, "Total " ZINT_FORMAT "\n", stat_info.isamb_blocks[i]*
bsize);
for (j = 0; j<5; j++)
if (stat_info.isamb_levels[i][j])
return 0;
}
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+