[QGIS-pt] qgis server e projectos no pgsql - cache?

Olá mais uma vez pessoal!

Ando aqui às voltas com o qgis server e estou muito bem impressionado!!

A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.

Parece haver aqui uma cache no meio... para ver o mapa uso o browser
diretamente, com um url getmap construído à mão. A cache do browser está
off. É enviado o header Cache-Control: no-cache.

Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
num request novo.

Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
correctamente...

Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
server faz isto tb, não vejo como possa ultrapassar este problema... a não
ser desistir de projectos em bd.

Abr,
Duarte

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html

Olá Duarte,

QGIS_SERVER_CACHE_SIZE ?

https://docs.qgis.org/testing/en/docs/user_manual/working_with_ogc/server/config.html#environment-variables

ab

-- G --

On Tue, Jun 16, 2020 at 5:45 PM duartecarreira <dncarreira@gmail.com> wrote:

Olá mais uma vez pessoal!

Ando aqui às voltas com o qgis server e estou muito bem impressionado!!

A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.

Parece haver aqui uma cache no meio... para ver o mapa uso o browser
diretamente, com um url getmap construído à mão. A cache do browser está
off. É enviado o header Cache-Control: no-cache.

Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
num request novo.

Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
correctamente...

Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
server faz isto tb, não vejo como possa ultrapassar este problema... a não
ser desistir de projectos em bd.

Abr,
Duarte

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html
_______________________________________________
QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-pt

Olá Duarte,

Os projetos em base de dados têm que ter um tratamento ligeiramente diferente. Porquê? Porque não há o mecanismo de inotify quando um projeto é alterado. Ou seja, o QGIS Server sabe, para os projetos em ficheiro, quando o mesmo é alterado. Nestes casos, o QGIS Server pode reler o projeto e atualizar a cache do projeto.

Com os projetos em base de dados o QGIS Server não é notificado quando são alterados. Por isso, uma forma de o QGIS Server reler o projeto é, como fizeste, fazer o restart ao Apache manualmente.

Eu sou fã de guardar os projetos em base de dados, em ambientes empresariais/multi-utilizador. Nestes casos, o que faço, é por um trigger na(s) tabela(s) dos projetos QGIS que me envia uma notificação sempre que um projeto é criado, alterado ou removido. Em Python, recebo essa notificação e faço as ações decorrentes de cada uma destas coisas.

O trigger em si, é simples e pode ser algo do género:

create trigger project_change_qgis_projects
after insert or delete or update on public.qgis_projects
for each row
execute procedure project_change();

A função que é executado é que envia a notificação:

CREATE OR REPLACE FUNCTION public.project_change() RETURNS trigger LANGUAGE plpgsql AS $$
declare
pname varchar;
rec record;
begin
if (TG_OP = ‘DELETE’) then
pname = old.name;
rec = old;
else
pname = new.name;
rec = new;
end if;
perform pg_notify(‘qgis’, FORMAT(‘{ “project”: “%s”, “operation”: “%s”, “database”: “%s”, “schema”: “%s”, “username”: “%s”, “when”: “%s” }’, pname, TG_OP, current_database(), current_schema(), current_user, now() ) );
return rec;
end
$$;

Depois, crio um processo que escuta as notificações ‘qgis’ e recebe os parâmetros em JSON. No mínimo podes fazer um reload do Apache e assim garantes que o projeto é relido pelo QGIS Server sempre que é alterado.

Espero que ajude.

Abraço e bom trabalho,

Jorge Gustavo

···

On 16/06/20 17:45, duartecarreira wrote:

Olá mais uma vez pessoal!

Ando aqui às voltas com o qgis server e estou muito bem impressionado!!

A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.

Parece haver aqui uma cache no meio... para ver o mapa uso o browser
diretamente, com um url getmap construído à mão. A cache do browser está
off. É enviado o header Cache-Control: no-cache.

Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
num request novo.

Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
correctamente...

Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
server faz isto tb, não vejo como possa ultrapassar este problema... a não
ser desistir de projectos em bd.

Abr,
Duarte

--
Sent from: [http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html](http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html)
_______________________________________________
QGIS-pt mailing list
[QGIS-pt@lists.osgeo.org](mailto:QGIS-pt@lists.osgeo.org)
[https://lists.osgeo.org/mailman/listinfo/qgis-pt](https://lists.osgeo.org/mailman/listinfo/qgis-pt)

Logo
Geomaster
Jorge Gustavo Rocha | Software Engineer
e: jgr@geomaster.pt | m: +351 910 333 888
g: 41.54094,-8.40490 | v: 510 906 109
a: Rua António Cândido Pinto, 67, 4715-400 Braga

Confirmo o que o Jorge disse,

falei com um dos core developers de QGIS server e disse que está disponível para implementar uma solução, caso alguém ou alguma entidade esteja interessado/a.

– G –

On Tue, Jun 16, 2020 at 10:41 PM Jorge Gustavo Rocha <jgr@geomaster.pt> wrote:

Olá Duarte,

Os projetos em base de dados têm que ter um tratamento ligeiramente diferente. Porquê? Porque não há o mecanismo de inotify quando um projeto é alterado. Ou seja, o QGIS Server sabe, para os projetos em ficheiro, quando o mesmo é alterado. Nestes casos, o QGIS Server pode reler o projeto e atualizar a cache do projeto.

Com os projetos em base de dados o QGIS Server não é notificado quando são alterados. Por isso, uma forma de o QGIS Server reler o projeto é, como fizeste, fazer o restart ao Apache manualmente.

Eu sou fã de guardar os projetos em base de dados, em ambientes empresariais/multi-utilizador. Nestes casos, o que faço, é por um trigger na(s) tabela(s) dos projetos QGIS que me envia uma notificação sempre que um projeto é criado, alterado ou removido. Em Python, recebo essa notificação e faço as ações decorrentes de cada uma destas coisas.

O trigger em si, é simples e pode ser algo do género:

create trigger project_change_qgis_projects
after insert or delete or update on public.qgis_projects
for each row
execute procedure project_change();

A função que é executado é que envia a notificação:

CREATE OR REPLACE FUNCTION public.project_change() RETURNS trigger LANGUAGE plpgsql AS $$
declare
pname varchar;
rec record;
begin
if (TG_OP = ‘DELETE’) then
pname = old.name;
rec = old;
else
pname = new.name;
rec = new;
end if;
perform pg_notify(‘qgis’, FORMAT(‘{ “project”: “%s”, “operation”: “%s”, “database”: “%s”, “schema”: “%s”, “username”: “%s”, “when”: “%s” }’, pname, TG_OP, current_database(), current_schema(), current_user, now() ) );
return rec;
end
$$;

Depois, crio um processo que escuta as notificações ‘qgis’ e recebe os parâmetros em JSON. No mínimo podes fazer um reload do Apache e assim garantes que o projeto é relido pelo QGIS Server sempre que é alterado.

Espero que ajude.

Abraço e bom trabalho,

Jorge Gustavo

On 16/06/20 17:45, duartecarreira wrote:

Olá mais uma vez pessoal!

Ando aqui às voltas com o qgis server e estou muito bem impressionado!!

A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.

Parece haver aqui uma cache no meio... para ver o mapa uso o browser
diretamente, com um url getmap construído à mão. A cache do browser está
off. É enviado o header Cache-Control: no-cache.

Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
num request novo.

Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
correctamente...

Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
server faz isto tb, não vejo como possa ultrapassar este problema... a não
ser desistir de projectos em bd.

Abr,
Duarte

--
Sent from: [http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html](http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html)
_______________________________________________
QGIS-pt mailing list
[QGIS-pt@lists.osgeo.org](mailto:QGIS-pt@lists.osgeo.org)
[https://lists.osgeo.org/mailman/listinfo/qgis-pt](https://lists.osgeo.org/mailman/listinfo/qgis-pt)


Geomaster
Jorge Gustavo Rocha | Software Engineer
e: jgr@geomaster.pt | m: +351 910 333 888
g: 41.54094,-8.40490 | v: 510 906 109
a: Rua António Cândido Pinto, 67, 4715-400 Braga


QGIS-pt mailing list
QGIS-pt@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-pt

Obrigado pessoal... realmente, foi o que me ocorreu também.

Parece-me que um parâmetro ou request para reler o projecto seria o ideal. O
problema do reload apache é que reinicia todos os processos fcgi, não apenas
os que estão com o projecto em causa. O que é um pouco violento demais para
mim.

Uma coisa interessante seria ter um gestor de processos fcgi do qgis server.
Definir n.º de processos min/max por projecto, reiniciar processos de um
projecto, monitorizar tempos, etc. Quase o que faz o fpm.

Assim, prefiro mesmo usar projectos em ficheiro...

Obg,
Duarte

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html