Synthesis of application-level utility functions for autonomic self-assessment