Принимая предложение Тома Кимбера еще на один шаг, вы можете использовать словарь функций, чтобы установить различные условия для ваших функций. Это решение расширяет сферу вопроса.
Я использую пример из личного приложения.
# write the dictionary
def applyCalculateSpend (df_name, cost_method_col, metric_col, rate_col, total_planned_col):
calculations = {
'CPMV' : df_name[metric_col] / 1000 * df_name[rate_col],
'Free' : 0
}
df_method = df_name[cost_method_col]
return calculations.get(df_method, "not in dict")
# call the function inside a lambda
test_df['spend'] = test_df.apply(lambda row: applyCalculateSpend(
row,
cost_method_col='cost method',
metric_col='metric',
rate_col='rate',
total_planned_col='total planned'), axis = 1)
cost method metric rate total planned spend
0 CPMV 2000 100 1000 200.0
1 CPMV 4000 100 1000 400.0
4 Free 1 2 3 0.0
Я просто хочу, чтобы эти 10 разных пар не знали других пар префиксных имен пользователей и не могли отправлять строфы любого типа (например, сообщение, присутствие, IQ) другой паре (с другим префиксом) [ 113] blockquote>
Прежде всего, поиграйте с mod_filter. Глядя на пример конфигурации, вы, вероятно, сможете выполнить то, что вы хотите, используя его: https://github.com/processone/ejabberd-contrib/tree/master/mod_filter
Может быть, вы можете определите ACL на основе шаблонов имен пользователей («aa *» или что-то в этом роде), и таким образом вы можете иметь всех пользователей в одном vhost.
В случае, если единственное решение требует наличия vhost для каждой группы пользователей, есть несколько идей:
Теперь каждые 1000 имен пользователей из указанных выше 10000 имеют фиксированный префикс в своих именах пользователей JID, например:
< / blockquote>Как вы упомянули, вы можете определить vhost в ejabberd для каждой группы пользователей: 10001@aa.example.com ... Или чтобы не изменять существующие имена пользователей: aa10001@aa.example.com .. .
Может быть, если я смогу каким-либо образом использовать виртуальный хост, которым легко управлять (часто добавляя новые пары), не добавляя новую базу данных для каждой из них, это будет лучшим решением для всех
blockquote >Правильно, вы можете иметь все vhosts в одной базе данных, если вы настроите ejabberd следующим образом и при создании базы данных будете использовать файл apropiate * .sql:
new_sql_schema: true
Можно ли динамически добавить виртуальный хост в конфигурации без остановки сервера?
blockquote>Да, это должно работать (это недавняя функция). Отредактируйте ejabberd.yml, как хотите, и перезагрузите его:
$ ejabberdctl reload_config