1 | #! perl # mandatory |
1 | #! perl # mandatory |
2 | |
2 | |
3 | our $SCHEDULE_INTERVAL = $cf::CFG{extractor_schedule_interval} || 3600; |
3 | our $SCHEDULE_INTERVAL = $cf::CFG{extractor_schedule_interval} || 3600; |
4 | |
4 | |
5 | use JSON::XS; |
5 | use JSON::XS; |
6 | |
6 | |
7 | my $db_mapinfo = cf::sync_job { cf::db_table "tag-mapinfo" }; # info/cache for maps |
7 | my $db_mapinfo = cf::sync_job { cf::db_table "tag-mapinfo" }; # info/cache for maps |
8 | my $db_target = cf::sync_job { cf::db_table "tag-target" }; # tag => maps |
8 | my $db_target = cf::sync_job { cf::db_table "tag-target" }; # tag => maps |
… | |
… | |
149 | warn sprintf "map-tag scan (%fs)", Event::time - $start; |
149 | warn sprintf "map-tag scan (%fs)", Event::time - $start; |
150 | Coro::Timer::sleep $SCHEDULE_INTERVAL; |
150 | Coro::Timer::sleep $SCHEDULE_INTERVAL; |
151 | } |
151 | } |
152 | }; |
152 | }; |
153 | |
153 | |
|
|
154 | sub find($) { |
|
|
155 | my ($tag) = @_; |
154 | |
156 | |
|
|
157 | my @res; |
|
|
158 | |
|
|
159 | utf8::encode (my $key = $tag); |
|
|
160 | BDB::db_get $db_target, undef, $key, my $data; |
|
|
161 | utf8::decode $data; |
|
|
162 | |
|
|
163 | for my $map ( |
|
|
164 | grep $_, |
|
|
165 | map { cf::map::find $_ } |
|
|
166 | grep s/^s//, |
|
|
167 | split /\x00/, $data |
|
|
168 | ) { |
|
|
169 | warn "map $map,$tag\n";#d# |
|
|
170 | $map->load; |
|
|
171 | |
|
|
172 | push @res, $map->find_tagged_objects ($tag); |
|
|
173 | |
|
|
174 | warn "tag<$tag>map<$map>res<@res>\n";#d# |
|
|
175 | } |
|
|
176 | |
|
|
177 | @res |
|
|
178 | } |