- 
        1. Re: How to extend the alert-email plugin for sending contents?thomas2004 Apr 11, 2014 7:22 AM (in response to thomas2004)The contend I mean here the body of the email. 
- 
        2. Re: How to extend the alert-email plugin for sending contents?tsegismont Apr 11, 2014 9:26 AM (in response to thomas2004)How about creating your own email sender plugin? You can start by copying the built-in plugin code, and enhance the email generation part. Remember that you need to update the plugin descriptor to let the server differentiate your plugin from the built-in one. 
- 
        3. Re: How to extend the alert-email plugin for sending contents?pathduck Apr 11, 2014 1:45 PM (in response to thomas2004)Well, you can always just edit the template like a text file and make it look however you'd like. For instance the default one is really big, and we need to convert email to SMS messages, so I've trimmed out a lot leaving just the essential data. I think the email subject is there as well but been a while since I've looked at it. Just make sure to make a backup as it does get overwritten on server update. Wish it was actually configurable in the Admin UI somewhere though, hint, hint 
- 
        4. Re: How to extend the alert-email plugin for sending contents?thomas2004 Apr 15, 2014 4:20 AM (in response to pathduck)I thing editing the template like a text file is not a good idea since this file is the only one template file. What I want is: when I define an alert, one can define his body. 
- 
        5. Re: How to extend the alert-email plugin for sending contents?thomas2004 Apr 16, 2014 7:22 AM (in response to tsegismont)Hi, There are several plugin codes. I see their structures are different. Which one you thing the better one I should take? 
- 
        6. Re: How to extend the alert-email plugin for sending contents?pilhuhn Apr 18, 2014 5:23 AM (in response to pathduck)Am 11.04.2014 um 10:45 schrieb Stian Lund <do-not-reply@jboss.com>: Wish it was actually configurable in the Admin UI somewhere though, hint, hint Which "it" ? Heiko P.S.: Patches are always welcome 
- 
        7. Re: How to extend the alert-email plugin for sending contents?pilhuhn Apr 18, 2014 5:23 AM (in response to thomas2004)Hey, Am 16.04.2014 um 04:23 schrieb Thomas Chang <do-not-reply@jboss.com>: There are several plugin codes. I see their structures are different. Which one you thing the better one I should take? Directly look at the AlertEmail sender. The idea is I think that you should in the plugin descriptor add a field (long string) to the alert-configuration, which is the field that is per alert Like <!-- What can a user configure when defining an alert --> <alert-configuration> <c:simple-property name="emailAddress" displayName="Receiver Email Address(es)" type="longString" description="Email addresses (separated by comma) used for notifications."> ... <c:simple-property name="template" type="longString" required="false" /> <<<<<< 
- 
        8. Re: How to extend the alert-email plugin for sending contents?pilhuhn Apr 18, 2014 5:45 AM (in response to pilhuhn)Crap, the email->forum gateway has cut off some stuff :-( The above continues: That template could either be a string that has the tokens like the original or a name of a file in a directory (in this case one needs to be careful in HA scenarios to copy that template-file into all servers) This field is then accessible in the send() method like this: String templateName = alertParameters.getSimpleValue("template"); Now the org.rhq.enterprise.server.plugins.alertEmail.EmailSender#send internally calls org.rhq.enterprise.server.alert.AlertManagerBean#sendAlertNotificationEmails which unfortunately does the sender plugin not make standalone. This internally calls org.rhq.enterprise.server.core.EmailManagerBean#getAlertEmailMessage to read the template code. So the alert sender would need to pass in the template path or template string from above property and pass that through to org.rhq.enterprise.server.core.EmailManagerBean#getAlertEmailMessage to be used instead of the default. If nothing is passed the solution can just fall back to what is already there. Hope that helps Heiko 
- 
        9. Re: How to extend the alert-email plugin for sending contents?thomas2004 Apr 28, 2014 4:46 AM (in response to pilhuhn)Hi, Thanks very much for the information and sorry for the late reply bcz. I have vacation. :-) I wonder how the variable 'templateName ' be used/called after it's defined so that it could be passed to the org.rhq.enterprise.server.core.EmailManagerBean#getAlertEmailMessage? 
- 
        10. Re: Re: How to extend the alert-email plugin for sending contents?pilhuhn Apr 28, 2014 5:05 AM (in response to thomas2004)Hey, you could use the variable to e.g. load a different template from the file system a little bit like this is done for the Alert-Scriptlang sender to load themplates relative to $SERVER/alert-email-templates String baseDir = System.getProperty("rhq.server.home") + File.separator + "alert-email-templates"; templatePath = baseDir + File.separator + templateName; If the templateName is non null. Otherwise just use the default. Then load the respective template file and proceed as in the existing case. 
- 
        11. Re: Re: How to extend the alert-email plugin for sending contents?thomas2004 Apr 28, 2014 9:29 AM (in response to pilhuhn)Hi, I understand the code here. But I still don't understand 100% how to "load the respective template file and proceed as in the existing case". Where and how can I load the variable 'templateName'? And what is the "existing case" which I should process? 
- 
        12. Re: Re: Re: How to extend the alert-email plugin for sending contents?pilhuhn Apr 28, 2014 9:59 AM (in response to thomas2004)Add the template name or path to template to the signature of org.rhq.enterprise.server.core.EmailManagerBean#getAlertEmailMessage then in the code do something like if (templatePath!=null) { try { templateStream =new FileInputStream(templatePath); template = new String(StreamUtil.slurp(templateStream)); } else { use existing code to load the default template } Hth (and send a pull-request when done 
- 
        13. Re: Re: Re: How to extend the alert-email plugin for sending contents?thomas2004 Apr 30, 2014 8:06 AM (in response to pilhuhn)Hi, I thing I did what you told me. But it doesn't work perfectly. Here is my code. I still get the body from default file "alert-email-template.txt". Could you please have a look? It's based on your EmailSender class: EmailSender.java ++++++++++++++ public class EmailSender extends AlertSender { private final Log log = LogFactory.getLog(EmailSender.class); @Override public SenderResult send(Alert alert) { String emailAddressString = alertParameters.getSimpleValue("emailAddress", null); String templateString = alertParameters.getSimpleValue("template"); log.info("templateString = " + templateString); // String baseDir = System.getProperty("rhq.server.home") + File.separator + "alert-email-templates"; String baseDir = "/tmp" + File.separator + "test"; log.info("baseDir = " + baseDir); String templatePath = baseDir + File.separator + templateString; log.info("templatePath = " + templatePath); String template = null; if (emailAddressString == null) { return SenderResult.getSimpleFailure("No email address given"); } List<String> emails = AlertSender.unfence(emailAddressString, String.class, ","); try { Set<String> uniqueEmails = new HashSet<String>(emails); Collection<String> badEmails = LookupUtil.getAlertManager() .sendAlertNotificationEmails(alert, uniqueEmails); List<String> goodEmails = new ArrayList<String>(uniqueEmails); goodEmails.removeAll(badEmails); SenderResult result = new SenderResult(); result.setSummary("Target addresses were: " + uniqueEmails); if (goodEmails.size() > 0) { result.addSuccessMessage("Successfully sent to: " + goodEmails); } if (badEmails.size() > 0) { result.addFailureMessage("Failed to send to: " + badEmails); } if (templatePath != null) { try { FileInputStream templateStream = new FileInputStream(templatePath); template = new String(StreamUtil.slurp(templateStream)); log.info("template = " + template); } catch (Exception e) { e.getStackTrace(); log.error("templatePath = NULL"); } } Map<String, String> message = new HashMap<String, String>(1); message.put(emailAddressString, template); return result; } catch (Throwable t) { return SenderResult.getSimpleFailure("Error sending email notifications to " + emails + ", cause: " + t.getMessage()); } } @Override public String previewConfiguration() { String emailAddressString = alertParameters.getSimpleValue("emailAddress", null); if (emailAddressString == null || emailAddressString.trim().length() == 0) { return "<empty>"; } return emailAddressString; } } rhq-serverplugin.xml ++++++++++++++++ <?xml version="1.0" encoding="UTF-8" ?> <alert-plugin name="alert-my-email" version="1.0" displayName="Alert:My Email" xmlns="urn:xmlns:rhq-serverplugin.alert" xmlns:c="urn:xmlns:rhq-configuration" xmlns:serverplugin="urn:xmlns:rhq-serverplugin" package="org.rhq.enterprise.server.plugins.alertEmail" description="Alert sender plugin that sends alert notifications via email" > <serverplugin:help> Used to send notifications to direct email addresses. </serverplugin:help> <!-- How does this sender show up in drop downs etc --> <short-name>My Direct Emails</short-name> <!-- Class that does the actual sending --> <plugin-class>EmailSender</plugin-class> <!-- What can a user configure when defining an alert --> <alert-configuration> <c:simple-property name="emailAddress" displayName="Receiver Email Address(es)" type="longString" description="Email addresses (separated by comma) used for notifications."> <c:constraint> <!-- a real email regex that validates all possible email address would be thousands of chars long --> <!-- here we do just a very basic validation of comma-separated str1@str2 --> <c:regex-constraint expression=".+@[^@, ]+(,.+@[^,@ ]+)?"/> </c:constraint> </c:simple-property> <c:simple-property name="template" type="longString" required="false" /> </alert-configuration> </alert-plugin> 
- 
        14. Re: Re: Re: How to extend the alert-email plugin for sending contents?pilhuhn Apr 30, 2014 8:24 AM (in response to thomas2004)I above code you have Collection<String> badEmails = LookupUtil.getAlertManager() .sendAlertNotificationEmails(alert, uniqueEmails); Which is calling into the server to do the real sending. You need to modify this to pass the template like Collection<String> badEmails = LookupUtil.getAlertManager() .sendAlertNotificationEmails(alert, uniqueEmails, template); and move the template fetching code before this line. Then inside AlertManagerBean.sendAlertNotificationEmails() you need to pass the template to the call to the org.rhq.enterprise.server.core.EmailManagerBean#getAlertEmailMessage() and use your template instead of the default one that is defined in there. If your template is null, you should fall back to using the default though. 
 
     
     
    