Skip to content
Snippets Groups Projects
Commit 3b208e93 authored by Giacomo Strangolino's avatar Giacomo Strangolino
Browse files

imported project

parent 9c1702ad
No related branches found
No related tags found
No related merge requests found
Showing
with 1193 additions and 1 deletion
# ca-tango-db-cache-mgr # ca-tango-db-cache-mgr
Update cache for Tango Device Attribute configuration data on redis, subscribing to Tango ATTR_CONF_EVENT events ### request syntax
\ No newline at end of file
> curl -v http://woody.elettra.eu:9296 -d $'{"srcs":[{"src":"test/device/1/double_scalar"}]}'
// Add predefined macros for your project here. For example:
// #define THE_ANSWER 42
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.1, 2022-01-03T09:41:21. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{f9866e68-571b-4235-a259-a121c8568b08}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{35e4a9f8-881d-412c-a238-38e89c0aa8b9}</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/archivi/devel/utils/git/ca-supervisor</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Default</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericBuildConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
./casupervisor -p 9295 -c ../casupervisor.conf -u http://woody.elettra.eu:8001 -i
# database for service and activity records
dbuser=www-data
dbpass=cadbdb
dbhost=localhost
dbnam=cadb
# bind to
host=taeyang.elettra.eu
port=9295
-std=c17
\ No newline at end of file
# database for service and activity records
ca-tango-db-cache-mgr:redis_ho=localhost
ca-tango-db-cache-mgr:host=woody.elettra.eu
ca-tango-db-cache-mgr:port=9296
[General]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.1, 2022-01-18T13:23:13. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{f9866e68-571b-4235-a259-a121c8568b08}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{35e4a9f8-881d-412c-a238-38e89c0aa8b9}</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/archivi/devel/utils/git/ca-tango-db-cache-mgr</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Default</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericBuildConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
-std=c++17
\ No newline at end of file
meson.build
src/ca-tango-db-cache-mgr.cpp
src/ca-tango-db-cache-mgr.h
src/casupcurl.cpp
src/casupcurl.h
src/casupjsoniz.cpp
src/casupjsoniz.h
src/casupredistrib.cpp
src/casupredistrib.h
src/catdbcacheu.cpp
src/catdbcacheu.h
src/catdbcaredisu.cpp
src/catdbcaredisu.h
src/config.h
src/main.cpp
src
/usr/local/cumbia-libs/include/cumbia
/usr/local/caserver-lib/include
/usr/local/redis-plus-plus/include
/usr/local/tango-9.3.3/include/tango
/usr/local/omniorb-4.2.3/include
[Unit]
Description=Canone 3 service supervisor: seek dormant caserver instances and perform failover operations
After=nginx.service
[Service]
ExecStart=@prefix@/bin/casupervisor -p @port@ -h @address@ -u "@default_nginx_url@" -s @user@ -f @logfile@ @conf_file@ @log_level@
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
project('ca-tango-db-cache-mgr', 'cpp', version : '1.0.0',
default_options : ['c_std=c17', 'cpp_std=c++17'])
project_description = 'Connect to tango attribute configuration change events to update the database cache'
srv_version = meson.project_version() # set in project()
# enable pinfo cuprintf
cpp_arguments = [ '-DCUMBIA_DEBUG_OUTPUT=1', '-DCATANGODBCACHEMGR_VERSION="' + srv_version + '"' ]
openssldep = dependency('openssl')
curldep = dependency('libcurl')
# for activities / threads
cumbiadep = dependency('cumbia', version: '>=1.4.0')
systemd_dep = dependency('systemd')
caserverlib_dep = dependency('caserver-lib')
redisdep = dependency('redis++')
nlohmann_json_dep = dependency('nlohmann_json', required : false)
if not nlohmann_json_dep.found()
message('nlohmann_json installation not found: trying subproject method')
message('refer to https://gitlab.com/PWMA/canone3/-/blob/master/nchan-setup/ubuntu-install.md')
# nlohmann_json dependency is added as subdir 'nlohmann-json-include'
nlohmann_json_proj = subproject('nlohmann-json-include')
nlohmann_json_dep = nlohmann_json_proj.get_variable('nlohmann_json_dep')
endif
# tango library
tangodep = dependency('tango')
includedirs = include_directories('src')
deps = [ dependency('threads'),
openssldep,
tangodep,
nlohmann_json_dep,
curldep,
cumbiadep,
caserverlib_dep,
systemd_dep,
redisdep ]
##
### Systemd section
### please edit meson_options.txt in the root dir
##
if systemd_dep.found()
deps += systemd_dep
servicedir = get_option('systemd_service_dir')
if servicedir == ''
servicedir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
endif
message('systemd dir: ' + servicedir)
# ca-tango-db-cache-mgr.service.in
# @prefix@/bin/caserver -p @default_port@ -u "@default_nginx_url@ -a @auth_url@
sysd_conf = configuration_data()
sysd_conf.set('prefix', get_option('prefix'))
sysd_conf.set('user', get_option('user'))
if(get_option('logfile') != '')
if (get_option('logfile') != 'console' and get_option('logfile') != 'syslog')
sysd_conf.set('logfile', join_paths(get_option('prefix'), get_option('logdir'), get_option('logfile')))
else
sysd_conf.set('logfile', get_option('logfile'))
endif
endif
if(get_option('loglev') != '')
sysd_conf.set('log_level', get_option('loglev'))
endif
if(get_option('port') != '')
sysd_conf.set('port', get_option('port'))
endif
if(get_option('address') != '')
sysd_conf.set('address', get_option('address'))
endif
if get_option('conf_file') != ''
sysd_conf.set('conf_file', '-c ' + join_paths( get_option('prefix'), get_option('conf_dir'), get_option('conf_file')))
endif
systemd_unit = configure_file(install_dir: servicedir,
configuration : sysd_conf,
input : 'ca-tango-db-cache-mgr.service.in',
output : 'ca-tango-db-cache-mgr.service')
endif
##
### end systemd section
##
if get_option('conf_file') != ''
install_data(get_option('conf_file'), install_dir : join_paths( get_option('prefix'), get_option('conf_dir')))
endif
headers = [
'src/config.h',
'src/ca-tango-db-cache-mgr.h',
'src/casupjsoniz.h',
'src/casupcurl.h',
'src/catdbcacheu.h',
'src/catdbcaredisu.h'
]
sources = [
'src/ca-tango-db-cache-mgr.cpp',
'src/main.cpp',
'src/casupjsoniz.cpp',
'src/casupcurl.cpp',
'src/catdbcacheu.cpp',
'src/catdbcaredisu.cpp'
]
executable('ca-tango-db-cache-mgr',
sources, dependencies : deps, cpp_args : cpp_arguments,
include_directories : includedirs,
install : true)
### ====================================== documentation ===========================
doxygen = find_program('doxygen', required : false)
if not doxygen.found()
error('MESON_SKIP_TEST doxygen not found.')
endif
doxydata = configuration_data()
doxydata.set('VERSION', meson.project_version())
if find_program('dot', required : false).found()
# In the real world this would set the variable
# to YES. However we set it to NO so that the
# list of generated files is always the same
# so tests always pass.
doxydata.set('HAVE_DOT', 'YES')
else
doxydata.set('HAVE_DOT', 'NO')
endif
message('\n\033[1;32m*\n*\033[0m enable subdir(\'doc\') in meson.build to generate documentation\n\033[1;32m*\033[0m\n')
# subdir('doc')
option('logfile', type : 'string', value : 'syslog', description : 'output to a file (/var/log/ca3.log), syslog or console')
option('user', type : 'string', value : 'www-data', description : 'user name to drop privileges to if the service is started by root')
option('port', type : 'string', value : '9296', description : 'service bind port number')
option('address', type : 'string', value : '', description : 'service bind address; default: auto')
option('logdir', type : 'string', value : 'log', description : 'log dir, under install prefix. Default $prefix/log')
option('logfile', type : 'string', value : 'ca-tango-db-cache-mgr.log', description : '[systemd] output to a file (under logdir), syslog or console')
option('loglev', type : 'string', value : '-i', description : '[systemd] log level: -i: info -w: warning, -v: debug. NOTE: hyphen is required: -i')
option('conf_file', type: 'string', value : 'ca-tango-db-cache-mgr.conf', description : '[systemd] configuration file name. If not empty, it is added to systemd service')
option('conf_dir', type : 'string', value : 'etc' , description : '[systemd] configuration file directory, under install prefix. Default: $prefix/etc' )
option('systemd_service_dir', type : 'string', value : '', description : '[systemd] if not empty, the service file will be installed there instead of pkgconfig \"systemdsystemunitdir\"')
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.1, 2022-01-18T13:23:26. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{f9866e68-571b-4235-a259-a121c8568b08}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{35e4a9f8-881d-412c-a238-38e89c0aa8b9}</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="MesonProjectManager.BuildConfig.Parameters"></value>
<value type="QString" key="MesonProjectManager.BuildConfig.Type">debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/archivi/devel/utils/git/build-ca-tango-db-cache-mgr-Desktop-debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">all</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">clean</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="MesonProjectManager.BuildConfig.Parameters"></value>
<value type="QString" key="MesonProjectManager.BuildConfig.Type">release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/archivi/devel/utils/git/build-ca-tango-db-cache-mgr-Desktop-release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">all</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">clean</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="MesonProjectManager.BuildConfig.Parameters"></value>
<value type="QString" key="MesonProjectManager.BuildConfig.Type">debugoptimized</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/archivi/devel/utils/git/build-ca-tango-db-cache-mgr-Desktop-debugoptimized</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">all</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">clean</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug With Optimizations</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<value type="QString" key="MesonProjectManager.BuildConfig.Parameters"></value>
<value type="QString" key="MesonProjectManager.BuildConfig.Type">minsize</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/archivi/devel/utils/git/build-ca-tango-db-cache-mgr-Desktop-minsize</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">all</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="MesonProjectManager.BuildStep.AdditionalArguments"></value>
<value type="QString" key="MesonProjectManager.BuildStep.BuildTargets">clean</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.BuildConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">ca-tango-db-cache-mgr</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">MesonProjectManager.MesonRunConfigurationca-tango-db-cache-mgr</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">ca-tango-db-cache-mgr</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/archivi/devel/utils/git/ca-tango-db-cache-mgr</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
#include "ca-tango-db-cache-mgr.h"
#include "casupjsoniz.h"
#include "casupcurl.h"
#include "catdbcacheu.h"
#include "catdbcaredisu.h"
#include <map>
#include <set>
#include <culog.h>
#include <cajson-src-bundle-ex.h>
#include <canetmsg.h>
#define _BUFSIZ 512
class CaTgDbCacheMgrPrivate {
public:
CaTgDbCacheMgrPrivate(CuLogImplI *l, const CuData& op) :
log(l), cachedim(1e6L), redisu(op), ltag("ca-tango-db-cache-mgr") {
}
long cachedim;
CuLogImplI *log;
std::map<std::string, Tango::DeviceProxy *>devmap;
// std::set is an associative container that contains a __sorted__ set of unique objects
std::map<std::string, int> evidmap;
CaTDBCacheU tgu; // tango utils
CaTDBCaRedisU redisu; // redis utils
const std::string ltag; // log "tag"
};
CaTgDbCacheMgr::CaTgDbCacheMgr(const CuData &opts, CuLogImplI *log) {
d = new CaTgDbCacheMgrPrivate(log, opts);
if(opts.containsKey("cachedim")) opts["cachedim"].to<long>(d->cachedim);
}
CaTgDbCacheMgr::~CaTgDbCacheMgr() {
delete d;
}
void CaTgDbCacheMgr::onProgress(int step, int total, const CuData &data) { }
void CaTgDbCacheMgr::onResult(const CuData &data) {
printf("CaTgDbCacheMgr.onResult: received %s\n", datos(data));
// from CaReceiver_A activity
//
// curl -v http://woody.elettra.eu:9296 -d $'{"srcs":[{"src":"test/device/1/double_scalar"}]}'
//
if(data.containsKey("data")) {
const std::string& s = data.s("data");
CaNetMsg nm(s);
printf("ca-tango-db-cache-mgr.onResult: received \e[1;36m%s\e[0m\n", s.c_str());
CaJsonSrcBundleExtract bux;
std::list<CuData> dl;
std::string chan, id, global_m;
bux.extract(nm.payload, dl, &chan, &id);
if(bux.error_msg.length() > 0) {
d->log->write(d->ltag, "Json error: " + bux.error_msg + " | msg payload " + s, CuLog::LevelError);
}
else {
m_monitor(dl);
for(const CuData& da : dl)
printf("ca-tango-db-cache-mgr.onResult: extracted %s\n", datos(da));
}
int fd = data.I("fd");
nm.setStatus(200).setPayload(CaSupJsoniz().make_msg_ok());
int byw = m_sock_write(fd, nm.raw());
printf("[0x%lx] \e[1;32mCaSupervisor::onResult \e[0;35m %d bytes written in reply \e[0m\n", pthread_self(), byw);
}
// connection / disconnection from ca-proxy
if(data.containsKey("fd") && data.containsKey("fdopen")) {
bool o = data.B("fdopen");
const int fd = data.I("fd");
d->log->write(d->ltag, "peer " + std::string(o ? "" : "dis") + "connected: sofd " + std::to_string(fd), CuLog::LevelInfo);
if(!o)
if(close(fd) < 0) d->log->write(d->ltag, "error closing peer socket: " + std::string(strerror(errno)));
}
}
void CaTgDbCacheMgr::onResult(const std::vector<CuData> &srcs) {
}
CuData CaTgDbCacheMgr::getToken() const {
return CuData("type", "ca-tango-db-cache-mgr");
}
void CaTgDbCacheMgr::push_event(Tango::AttrConfEventData *ed) {
std::string dnam = d->tgu.m_dev_get_name(ed->device);
if(dnam.length() == 0)
d->log->write("ca-tg-db-cache-mgr", "push_event: dev->name failed: " + d->tgu.error);
CuData co;
d->tgu.m_fill_from_attconf(ed->attr_conf, co);
d->log->write(d->ltag, "configuration changed for " + ed->attr_name + ": " + datos(co), CuLog::LevelInfo );
bool redisok = d->redisu.update(ed->attr_name, co);
if(!redisok)
d->log->write(d->ltag, "error updating conf data on redis: " + d->redisu.error());
else {
CuData out;
d->redisu.get(ed->attr_name, out);
printf("CaTgDbCacheMgr::push_event read just updated data for \e[1;36m%s\e[0m : \e[1;32m%s\e[0m\n",
ed->attr_name.c_str(), datos(out));
}
}
int CaTgDbCacheMgr::m_sock_write(int sofd, const std::string &buf) {
int totclibw = 0, clibw = 0, wlen = buf.length();
// write rbuf back to client fd
while(totclibw < wlen && clibw >= 0) {
clibw = send(sofd, buf.c_str() + totclibw, wlen - totclibw < _BUFSIZ ? wlen - totclibw : _BUFSIZ, MSG_NOSIGNAL);
if(clibw < 0) {
d->log->write(d->ltag, "write failed :" + std::string(strerror(errno)));
}
totclibw += clibw;
}
return clibw >=0 ? totclibw : clibw;
}
int CaTgDbCacheMgr::m_monitor(const std::list<CuData> &srcs) {
int evid = -1;
for(const CuData& da : srcs) {
const std::string& src = da.s("src");
if(src.length() > 0 && std::count(src.begin(), src.end(), '/') == 3) {
Tango::DeviceProxy *dev = nullptr;
std::map<std::string, Tango::DeviceProxy *>::const_iterator it = d->devmap.find(src);
if(it != d->devmap.end())
dev = it->second;
else if(src.find("->") == std::string::npos) { // not a command
size_t lastsep = src.rfind("/");
const std::string &devnam = src.substr(0, lastsep);
const std::string &attnam = src.substr(lastsep + 1);
printf("CaTgDbCacheMgr: got a new srcs dev \"%s\" attr \"%s\"\n", devnam.c_str(), attnam.c_str());
dev = d->tgu.m_get_dev(devnam);
if(dev != nullptr) {
if(d->evidmap.find(src) != d->evidmap.end()) {
d->log->write(d->ltag,
src + " already monitored with event id " + std::to_string(d->evidmap[src]), CuLog::LevelInfo);
}
else {
d->devmap[devnam] = dev;
evid = d->tgu.m_att_conf_change_subscribe(dev, devnam, attnam, this);
if(evid > -1) {
d->evidmap[src] = evid;
d->log->write(d->ltag,
src + " successfully subscribed to att_conf_event: id "
+ std::to_string(evid) +
"[" + std::to_string(d->evidmap.size()) + "/" +
std::to_string(d->cachedim) + "]", CuLog::LevelInfo);
} else {
d->log->write(d->ltag, "error subscribing " + src + ": " + d->tgu.error);
}
}
}
}
else
d->log->write(d->ltag, src + ": commands are unsupported");
}
else
d->log->write(d->ltag, "invalid source " + src);
}
return evid;
}
#ifndef CASUPERVISOR_H
#define CASUPERVISOR_H
#include <vector>
#include <cuthreadlistener.h>
#include <tango.h>
#include <cudata.h>
class CuLogImplI;
class CaSupDbActivity;
class CaTgDbCacheMgrPrivate;
class CaTgDbCacheMgr : public CuThreadListener, public Tango::CallBack
{
public:
CaTgDbCacheMgr(const CuData& opts, CuLogImplI *log);
virtual ~CaTgDbCacheMgr();
// CuThreadListener interface
public:
void onProgress(int step, int total, const CuData &data);
void onResult(const CuData &data);
void onResult(const std::vector<CuData> &srcs);
CuData getToken() const;
private:
CaTgDbCacheMgrPrivate *d;
int m_sock_write(int sofd, const std::string &buf);
int m_monitor(const std::list<CuData> &srcs);
public: // CallBack interface
void push_event(Tango::AttrConfEventData *ed);
};
#endif // CASUPERVISOR_H
#include "casupcurl.h"
#include "casupjsoniz.h"
#include <curl/curl.h>
#include <cumacros.h>
class CaSupCurlPrivate {
public:
CURL *curl;
std::string url, message, response;
bool ok, ssl_verify_peer;
};
CaSupCurl::CaSupCurl(const std::string& url, bool ssl_verifypeer) {
d = new CaSupCurlPrivate;
d->url = url + "/bu/src-bundle";
d->ssl_verify_peer = ssl_verifypeer;
d->curl = curl_easy_init();
d->ok = d->curl != nullptr;
}
CaSupCurl::~CaSupCurl() {
curl_easy_cleanup(d->curl);
delete d;
}
std::map<std::string, std::string> CaSupCurl::xmit(const std::map<std::string,std::string> &datamap) {
std::map<std::string, std::string> resultmap;
int cnt = 0;
bool ok;
std::string message;
CaSupJsoniz jiz;
for(const auto& [chan, json] : datamap) {
++cnt;
struct curl_slist *slist = nullptr;
std::string chanhdr = "X-Channel: " + chan;
std::string content_len = "Content-Length: " + std::to_string(json.length());
char errbuf[CURL_ERROR_SIZE];
curl_slist_append(slist, "Accept: application/json");
curl_slist_append(slist, "Content-Type: application/json");
curl_slist_append(slist, chanhdr.c_str());
curl_slist_append(slist, content_len.c_str());
curl_easy_setopt(d->curl, CURLOPT_URL, d->url.c_str());
curl_easy_setopt(d->curl, CURLOPT_HEADER, slist);
curl_easy_setopt(d->curl, CURLOPT_POSTFIELDS, json.c_str());
curl_easy_setopt(d->curl, CURLOPT_ERRORBUFFER, errbuf);
// CURLOPT_SSL_VERIFYPEER true by default in CaOptParser
curl_easy_setopt(d->curl, CURLOPT_SSL_VERIFYPEER, d->ssl_verify_peer);
// suppress response to stdout
curl_easy_setopt(d->curl, CURLOPT_WRITEFUNCTION, CaSupCurl::write_callback);
CaSupCurlWriteFuncData *wd = new CaSupCurlWriteFuncData(std::to_string(cnt));
d->response.clear();
curl_easy_setopt(d->curl, CURLOPT_WRITEDATA, (void *) &d->response );
CURLcode cuco = curl_easy_perform(d->curl);
ok = (cuco == CURLE_OK);
// if CURL successful let message hold the server reply
ok ? message = d->response :
message = jiz.make_err_msg(std::string("CaSupCurl::xmit: ") + curl_easy_strerror(cuco) + ": "
+ errbuf + ": code " + std::to_string(cuco));
curl_slist_free_all(slist);
resultmap[chan] = message;
delete wd;
}
return resultmap;
}
size_t CaSupCurl::write_callback(char *contents, size_t size, size_t nmemb, void *userdata) {
std::string *response = static_cast<std::string *>(userdata);
response->append((char*)contents, size * nmemb);
return size * nmemb;
}
int CaSupCurl::socket_callback(CURL *easy, curl_socket_t s, int what, void *userp, void *socketp) {
return 0;
}
int CaSupCurl::start_timeout(CURLM *multi, long timeout_ms, void *userp) {
return 0;
}
const std::string &CaSupCurl::response() const {
return d->response;
}
#ifndef CASUPCURL_H
#define CASUPCURL_H
#include <string>
#include <curl/curl.h>
#include <vector>
#include <map>
class CaSupCurlPrivate;
class CaSupCurl;
class CaSupCurlWriteFuncData {
public:
CaSupCurlWriteFuncData(const std::string& _chan) {
chan = _chan;
}
std::string chan;
int su_cnt;
};
class CaSupCurl
{
public:
CaSupCurl(const std::string &url, bool ssl_verifypeer);
virtual ~CaSupCurl();
std::map<std::string, std::string> xmit(const std::map<std::string, std::string> &datamap);
static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
static int socket_callback(CURL *easy, /* easy handle */
curl_socket_t s, /* socket */
int what, /* what to wait for */
void *userp, /* private callback pointer */
void *socketp);
static int start_timeout(CURLM *multi, long timeout_ms, void *userp);
const std::string& response() const;
private:
CaSupCurlPrivate *d;
};
#endif // CASUPCURL_H
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment