Re: Im having trouble with writing a patch to prewikka

"Paul Robert Marino" <[email protected]>
Newsgroups gmane.comp.security.ids.prelude.devel
Message-ID <[email protected]>
I found a work around
Im not happy with it but it works and it does improve the speed of prewikka
using postgresql. The problem seem to be that there seems to be no way for
DbResultValues() in IDMEFDatabase.py to handle seaking through the rows but
a for loop though not the most efficent way to do it but it works please
find the attached revised patch
i will now create a ticket for the patch on the wiki



On 6/13/07, Paul Robert Marino <[email protected]> wrote:
>
> I am working on a patch to make the selection of the min and max time of
> an alers groupong faster in pgsql
> I came up with a way to do this a while ago but it had a negitive effect
> on the preformance on mysql
> I made a new version of my original patch which will not have any effect
> on mysql
>
> see the attached patch file
>
> now I have a new problem
>
>
> time_list = self.env.idmef_db.getValues(["alert.create_time/order_asc"],
> criteria2)
> time_min = time_list [0][0]
> time_max = time_list [0][-1]
>
> does not return the output i expect. in the past when i tested the it
> worked but now time_list [0][-1] returns null and furrther testing i found
> time_list [0][2] returns null and time_list [0][3] returns out of index even
> though i know the select returned more than 700 rows
>
> is this a bug or  was the way self.env.idmef_db.getValues() returns rows
> changed for reason
> if the change was intentional how can i access the rows now.
>
>
>
>
> Here are my benchmarks of a select made these where produced by taking the
> two versions of the selects one before my patch and one after from the
> postgresql log grabing the same information from the database. i wrote a
> simple script to bencmark the queries
> NOTE: I have obscures the IP addresses in the queies but they were
> identical during my test
>
> BEFORE
>
> pmarino@Zippy ~/prelude $ ./dbtest.sh "SELECT t0.time, t0.gmtoff, t0.usecFROM Prelude_Alert AS top_table LEFT JOIN Prelude_CreateTime AS t0 ON
> (t0._parent_type='A' AND t0._message_ident=top_table._ident) LEFT JOIN
> Prelude_Address AS t1 ON (t1._parent_type='S' AND
> t1._message_ident=top_table._ident AND t1._parent0_index = 0 AND t1._index =
> 0) LEFT JOIN Prelude_Address AS t2 ON (t2._parent_type='T' AND
> t2._message_ident=top_table._ident AND t2._parent0_index = 0 AND t2._index =
> 0) WHERE (( t1.address IS NULL AND t2.address = 'xxx.xxx.xxx.xxx') OR (
> t1.address = '' AND t2.address = 'xxx.xxx.xxx.xxx')) ORDER BY 1 ASC LIMIT
> 1"
>         time         | gmtoff |  usec
> ---------------------+--------+--------
>  2006-11-04 20:04:39 | -18000 | 963038
> (1 row)
>
>
> real    0m2.672s
> user    0m0.000s
> sys     0m0.044s
> pmarino@Zippy ~/prelude $ ./dbtest.sh "SELECT t0.time, t0.gmtoff, t0.usecFROM Prelude_Alert AS top_table LEFT JOIN Prelude_CreateTime AS t0 ON
> (t0._parent_type='A' AND t0._message_ident=top_table._ident) LEFT JOIN
> Prelude_Address AS t1 ON (t1._parent_type='S' AND
> t1._message_ident=top_table._ident AND t1._parent0_index = 0 AND t1._index =
> 0) LEFT JOIN Prelude_Address AS t2 ON (t2._parent_type='T' AND
> t2._message_ident=top_table._ident AND t2._parent0_index = 0 AND t2._index =
> 0) WHERE (( t1.address IS NULL AND t2.address = 'xxx.xxx.xxx.xxx') OR (
> t1.address = '' AND t2.address = 'xxx.xxx.xxx.xxx')) ORDER BY 1 DESC LIMIT
> 1"
>         time         | gmtoff |  usec
> ---------------------+--------+--------
>  2007-01-30 23:21:09 | -18000 | 238353
> (1 row)
>
> real    0m2.516s
> user    0m0.012s
> sys     0m0.040s
>
>
>
>
> AFTER
> NOTE: Ive removed some of the output in the middle because only the first
> and last row are important to the results
>
> pmarino@Zippy ~/prelude $ ./dbtest.sh "SELECT t0.time, t0.gmtoff, t0.usecFROM Prelude_Alert AS top_table LEFT JOIN Prelude_CreateTime AS t0 ON
> (t0._parent_type='A' AND t0._message_ident=top_table._ident) LEFT JOIN
> Prelude_Address AS t1 ON (t1._parent_type='S' AND
> t1._message_ident=top_table._ident AND t1._parent0_index = 0 AND t1._index =
> 0) LEFT JOIN Prelude_Address AS t2 ON (t2._parent_type='T' AND
> t2._message_ident=top_table._ident AND t2._parent0_index = 0 AND t2._index =
> 0) WHERE (( t1.address IS NULL AND t2.address = 'xxx.xxx.xxx.xxx') OR (
> t1.address = '' AND t2.address = 'xxx.xxx.xxx.xxx')) ORDER BY 1 ASC"
>         time         | gmtoff |  usec
> ---------------------+--------+--------
>  2006-11-04 20:04:39 | -18000 | 963038
>  2006-11-04 20:04:39 | -18000 | 976354
>  2006-11-04 20:05:42 | -18000 | 855951
>  2006-11-04 20:05:42 | -18000 | 845850
>  2006-11-04 20:06:55 | -18000 | 181885
> ......
>  2007-01-30 23:21:07 | -18000 | 404495
>  2007-01-30 23:21:08 | -18000 | 405161
>  2007-01-30 23:21:09 | -18000 | 241936
>  2007-01-30 23:21:09 | -18000 | 238353
> (768 rows)
>
>
> real    0m2.445s
> user    0m0.020s
> sys     0m0.028s
>
>
>
> the results are fairly clear if you look at the real time on the two
> queries in the before and the one query in the after
> the net result is a savings of aproximitly 2.4 seconds per grouping with
> 50 grouping on the screen this results in a saving of 120 seconds
>
>
>
>
>
>
>
>

_______________________________________________
Prelude-devel site list
[email protected]
http://www.prelude-ids.org/mailman/listinfo/prelude-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.