Skip to content

Commit

Permalink
appmodel: use appmodel_iter_applications/transformations() instead of…
Browse files Browse the repository at this point in the history
… iter_objects

Let's hide that applications/transformations are stored in the same
hashtable with a distinct key. These higher level helpers
will encode the object name so that call sites don't have to.

Signed-off-by: Balazs Scheidler <balazs.scheidler@axoflow.com>
  • Loading branch information
bazsi committed Oct 26, 2023
1 parent 42549e3 commit 76e9e64
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 30 deletions.
49 changes: 23 additions & 26 deletions modules/appmodel/app-parser-generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ struct _AppObjectGenerator
{
CfgBlockGenerator super;
gboolean (*parse_arguments)(AppObjectGenerator *self, CfgArgs *args, const gchar *reference);
void (*generate_config)(AppObjectGenerator *self, AppModelContext *appmodel, GString *result);
void (*generate_config)(AppObjectGenerator *self, GlobalConfig *cfg, GString *result);
const gchar *included_apps;
const gchar *excluded_apps;
gboolean is_parsing_enabled;
Expand Down Expand Up @@ -108,12 +108,11 @@ _generate(CfgBlockGenerator *s, GlobalConfig *cfg, gpointer args, GString *resul
{
AppObjectGenerator *self = (AppObjectGenerator *) s;
CfgArgs *cfgargs = (CfgArgs *)args;
AppModelContext *appmodel = appmodel_get_context(cfg);

if (!self->parse_arguments(self, cfgargs, reference))
return FALSE;

self->generate_config(self, appmodel, result);
self->generate_config(self, cfg, result);

return TRUE;
}
Expand Down Expand Up @@ -190,33 +189,32 @@ _generate_action(AppParserGenerator *self, Application *app)
}

static void
_generate_application(AppModelObject *object, gpointer user_data)
_generate_application(Application *app, gpointer user_data)
{
Application *app = (Application *) object;
AppParserGenerator *self = (AppParserGenerator *) user_data;

if (strcmp(self->topic, object->instance) != 0)
if (strcmp(self->topic, app->super.instance) != 0)
return;

if (!_is_application_included(&self->super, object->name))
if (!_is_application_included(&self->super, app->super.name))
return;

if (_is_application_excluded(&self->super, object->name))
if (_is_application_excluded(&self->super, app->super.name))
return;

g_string_append_printf(self->block, "\n#Start Application %s\n", object->name);
g_string_append_printf(self->block, "\n#Start Application %s\n", app->super.name);
g_string_append(self->block, "channel {\n");
_generate_filter(self, app->filter_expr);
_generate_parser(self, app->parser_expr);
_generate_action(self, app);
g_string_append(self->block, "};\n");
g_string_append_printf(self->block, "\n#End Application %s\n", object->name);
g_string_append_printf(self->block, "\n#End Application %s\n", app->super.name);
}

static void
_generate_applications(AppParserGenerator *self, AppModelContext *appmodel)
_generate_applications(AppParserGenerator *self, GlobalConfig *cfg)
{
appmodel_context_iter_objects(appmodel, APPLICATION_TYPE_NAME, _generate_application, self);
appmodel_iter_applications(cfg, _generate_application, self);
}

static void
Expand All @@ -226,26 +224,26 @@ _generate_empty_frame(AppParserGenerator *self)
}

static void
_generate_framing(AppParserGenerator *self, AppModelContext *appmodel)
_generate_framing(AppParserGenerator *self, GlobalConfig *cfg)
{
g_string_append(self->block,
"\nchannel {\n"
" junction {\n");

_generate_applications(self, appmodel);
_generate_applications(self, cfg);
_generate_empty_frame(self);
g_string_append(self->block, " };\n");
g_string_append(self->block, "}");
}

static void
app_parser_generate_config(AppObjectGenerator *s, AppModelContext *appmodel, GString *result)
app_parser_generate_config(AppObjectGenerator *s, GlobalConfig *cfg, GString *result)
{
AppParserGenerator *self = (AppParserGenerator *) s;

self->block = result;
if (self->super.is_parsing_enabled)
_generate_framing(self, appmodel);
_generate_framing(self, cfg);
else
_generate_empty_frame(self);
self->block = NULL;
Expand Down Expand Up @@ -301,39 +299,38 @@ app_transform_generator_parse_arguments(AppObjectGenerator *s, CfgArgs *args, co
}

static void
_generate_app_transform(AppModelObject *object, gpointer user_data)
_generate_app_transform(Transformation *transformation, gpointer user_data)
{
Transformation *transformation = (Transformation *) object;
AppTransformGenerator *self = (AppTransformGenerator *) user_data;

if (strcmp(self->target, object->instance) != 0)
if (strcmp(self->target, transformation->super.instance) != 0)
return;

if (!_is_application_included(&self->super, object->name))
if (!_is_application_included(&self->super, transformation->super.name))
return;

if (_is_application_excluded(&self->super, object->name))
if (_is_application_excluded(&self->super, transformation->super.name))
return;

g_string_append_printf(self->block, "\n#Start Application %s\n", object->name);
g_string_append_printf(self->block, "\n#Start Application %s\n", transformation->super.name);
g_string_append(self->block, "channel {\n");

g_string_append_printf(self->block, " filter { tags(\".app.%s\"); };\n", object->name);
g_string_append_printf(self->block, " filter { tags(\".app.%s\"); };\n", transformation->super.name);
g_string_append_printf(self->block, " %s\n", transformation->translate_expr);
g_string_append(self->block, " flags(final);\n");
g_string_append(self->block, "};\n");
g_string_append_printf(self->block, "\n#End Application %s\n", object->name);
g_string_append_printf(self->block, "\n#End Application %s\n", transformation->super.name);
}


static void
app_transform_generate_config(AppObjectGenerator *s, AppModelContext *appmodel, GString *result)
app_transform_generate_config(AppObjectGenerator *s, GlobalConfig *cfg, GString *result)
{
AppTransformGenerator *self = (AppTransformGenerator *) s;

self->block = result;
g_string_append_printf(result, "## app-transform(target(%s))\nchannel {", self->target);
appmodel_context_iter_objects(appmodel, TRANSFORMATION_TYPE_NAME, _generate_app_transform, self);
appmodel_iter_transformations(cfg, _generate_app_transform, self);
g_string_append(result, "}");
self->block = NULL;
}
Expand Down
6 changes: 3 additions & 3 deletions modules/appmodel/appmodel-context.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,9 @@ appmodel_context_lookup_object(AppModelContext *self, const gchar *type, const g

void
appmodel_context_iter_objects(AppModelContext *self,
const gchar *type,
void (*foreach)(AppModelObject *app, gpointer user_data),
gpointer user_data)
const gchar *type,
AppModelContextIterFunc foreach,
gpointer user_data)
{
gint i;

Expand Down
3 changes: 2 additions & 1 deletion modules/appmodel/appmodel-context.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

typedef struct _AppModelContext AppModelContext;
typedef struct _AppModelObject AppModelObject;
typedef void(*AppModelContextIterFunc)(AppModelObject *object, gpointer user_data);

struct _AppModelObject
{
Expand All @@ -41,7 +42,7 @@ void appmodel_object_free(AppModelObject *self);

void appmodel_context_iter_objects(AppModelContext *self,
const gchar *type,
void (*foreach)(AppModelObject *object, gpointer user_data),
AppModelContextIterFunc foreach,
gpointer user_data);
AppModelObject *appmodel_context_lookup_object(AppModelContext *self, const gchar *type, const gchar *name, const gchar *instance);
void appmodel_context_register_object(AppModelContext *self, AppModelObject *object);
Expand Down
14 changes: 14 additions & 0 deletions modules/appmodel/appmodel.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,24 @@ appmodel_register_application(GlobalConfig *cfg, Application *application)
appmodel_context_register_object(ac, &application->super);
}

void
appmodel_iter_applications(GlobalConfig *cfg, void (*foreach)(Application *app, gpointer user_data), gpointer user_data)
{
AppModelContext *appmodel = appmodel_get_context(cfg);
appmodel_context_iter_objects(appmodel, APPLICATION_TYPE_NAME, (AppModelContextIterFunc) foreach, user_data);
}

void
appmodel_register_transformation(GlobalConfig *cfg, Transformation *transformation)
{
AppModelContext *ac = appmodel_get_context(cfg);

appmodel_context_register_object(ac, &transformation->super);
}

void
appmodel_iter_transformations(GlobalConfig *cfg, void (*foreach)(Transformation *transformation, gpointer user_data), gpointer user_data)
{
AppModelContext *appmodel = appmodel_get_context(cfg);
appmodel_context_iter_objects(appmodel, TRANSFORMATION_TYPE_NAME, (AppModelContextIterFunc) foreach, user_data);
}
3 changes: 3 additions & 0 deletions modules/appmodel/appmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@

AppModelContext *appmodel_get_context(GlobalConfig *cfg);
void appmodel_register_application(GlobalConfig *cfg, Application *application);
void appmodel_iter_applications(GlobalConfig *cfg, void (*foreach)(Application *app, gpointer user_data), gpointer user_data);

void appmodel_register_transformation(GlobalConfig *cfg, Transformation *transformation);
void appmodel_iter_transformations(GlobalConfig *cfg, void (*foreach)(Transformation *transformation, gpointer user_data), gpointer user_data);

#endif

0 comments on commit 76e9e64

Please sign in to comment.